Python爬取微博数据实战教程(附完整代码)

Python爬虫-Weibo模拟登录及crawling 最近在学习python爬虫,想尝试爬取Weibo数据。然而时代在变化,网上的资料已经过时,基本上都无法在2021年的Weibo上正常获取数据,因此通过参考资料和自己钻研,最终走通了crawling过程。下面我会详细说明整个流程及注意事项,一方面是总结,一方面也为大家提供一个参考,希望能够帮助到大家。 python版本3.9.2 需要一个可以正常使用的Weibo账号及密码。 需要一部能够正常使用的手机用于验证。 可选网页记录工具,我这里使用的是Fiddler,大家也可以使用其他的工具,有助于理解原理。 阅读详情
AI摘要

本文介绍用Python爬取微博数据的完整流程,包括环境搭建、登录模拟、数据抓取、反爬应对和数据存储等。详细说明了所需工具包和开发环境,给出三种微博登录方案,还介绍了反爬虫策略、数据存储方案,最后有完整案例演示及常见问题解答。

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取!】

微博作为国内最大的社交媒体平台之一,蕴含着大量有价值的公开数据。本文将详细介绍如何使用Python爬取微博数据,包括环境搭建、登录模拟、数据抓取、反爬应对、数据存储等完整流程,并提供可直接运行的代码示例。

一、环境准备与工具选择
1.1 必需工具包

pip install requests selenium beautifulsoup4 pandas pyquery pymysql

requests:发送HTTP请求

selenium:模拟浏览器操作(应对动态加载)

beautifulsoup4/pyquery:HTML解析

pandas:数据处理

pymysql:数据库存储

1.2 推荐开发环境
Python 3.8+

Chrome浏览器 + ChromeDriver

MySQL 5.7+(可选)

二、微博登录模拟(三种方案)
2.1 方案一:Cookie直接登录(最简单)
浏览器登录微博后按F12打开开发者工具

在Application > Cookies中复制SUB和SUHB的值

import requests

cookies = {
    'SUB': '你的SUB值',
    'SUHB': '你的SUHB值'
}

response = requests.get('https://weibo.com', cookies=cookies)
print(response.status_code)  # 200表示成功

2.2 方案二:Selenium模拟登录(更稳定)

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://weibo.com/login.php')

# 自动填写账号密码
driver.find_element_by_id('loginname').send_keys('你的账号')
driver.find_element_by_name('password').send_keys('你的密码')
driver.find_element_by_xpath('//a[@node-type="submitBtn"]').click()

# 等待登录完成
time.sleep(5)

# 获取登录后的Cookies
cookies = driver.get_cookies()
print(cookies)

driver.quit()

2.3 方案三:API登录(最复杂但最稳定)

需要分析微博手机端登录接口,这里给出关键代码:

import requests

session = requests.Session()
login_url = 'https://passport.weibo.cn/sso/login'

data = {
    'username': '你的账号',
    'password': '加密后的密码',  # 需要研究加密算法
    'savestate': '1',
    'r': 'https://weibo.cn/',
    'ec': '0',
    'pagerefer': '',
    'entry': 'mweibo',
    'wentry': '',
    'loginfrom': '',
    'client_id': '',
    'code': '',
    'qq': '',
    'mainpageflag': '1',
    'hff': '',
    'hfp': ''
}

headers = {
    'Referer': 'https://passport.weibo.cn/signin/login',
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)'
}

response = session.post(login_url, data=data, headers=headers)
print(response.json())

三、微博数据抓取实战

3.1 抓取用户基本信息

def get_user_info(user_id, cookies):
    url = f'https://weibo.com/ajax/profile/info?uid={user_id}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        'X-Requested-With': 'XMLHttpRequest'
    }
    
    response = requests.get(url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        data = response.json()
        user_info = {
            'id': data['data']['user']['id'],
            'screen_name': data['data']['user']['screen_name'],
            'gender': data['data']['user']['gender'],
            'location': data['data']['user']['location'],
            'description': data['data']['user']['description'],
            'followers_count': data['data']['user']['followers_count'],
            'friends_count': data['data']['user']['friends_count'],
            'statuses_count': data['data']['user']['statuses_count'],
            'verified': data['data']['user']['verified']
        }
        return user_info
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return None

3.2 抓取用户微博内容(含分页)

def get_weibo_list(user_id, page=1, cookies=None):
    url = f'https://weibo.com/ajax/statuses/mymblog?uid={user_id}&page={page}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        'X-Requested-With': 'XMLHttpRequest'
    }
    
    response = requests.get(url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        data = response.json()
        weibo_list = []
        for item in data['data']['list']:
            weibo_info = {
                'id': item['id'],
                'created_at': item['created_at'],
                'text': item['text_raw'],
                'reposts_count': item['reposts_count'],
                'comments_count': item['comments_count'],
                'attitudes_count': item['attitudes_count'],
                'pics': [pic['url'] for pic in item.get('pics', [])]
            }
            weibo_list.append(weibo_info)
        return weibo_list
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return []

3.3 抓取微博评论数据

def get_weibo_comments(weibo_id, page=1, cookies=None):
    url = f'https://weibo.com/ajax/statuses/buildComments?flow=0&id={weibo_id}&page={page}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        'X-Requested-With': 'XMLHttpRequest'
    }
    
    response = requests.get(url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        data = response.json()
        comments = []
        for item in data['data']:
            comment = {
                'id': item['id'],
                'text': item['text_raw'],
                'user': item['user']['screen_name'],
                'user_id': item['user']['id'],
                'created_at': item['created_at'],
                'like_count': item['like_count']
            }
            comments.append(comment)
        return comments
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return []

四、反爬虫应对策略
4.1 常见反爬措施
频率限制:微博会限制单个IP的请求频率

验证码:频繁访问会触发验证码

User-Agent检测:未设置合法UA会被拦截

Cookie失效:长时间使用的Cookie会失效

4.2 应对方案

import random
import time

# 1. 使用代理IP池
proxies = [
    {'http': 'http://123.123.123.123:8888'},
    {'http': 'http://124.124.124.124:8888'}
]

# 2. 随机User-Agent
user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
    'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)'
]

# 3. 随机延迟
def random_delay():
    time.sleep(random.uniform(1, 3))

# 使用示例
def safe_request(url, cookies):
    headers = {
        'User-Agent': random.choice(user_agents)
    }
    proxy = random.choice(proxies)
    
    random_delay()
    try:
        response = requests.get(url, headers=headers, cookies=cookies, proxies=proxy)
        return response
    except Exception as e:
        print(f"请求异常: {e}")
        return None

五、数据存储方案

5.1 存储到CSV文件

import pandas as pd

def save_to_csv(data, filename):
    df = pd.DataFrame(data)
    df.to_csv(filename, index=False, encoding='utf_8_sig')  # 支持中文
    
# 使用示例
user_info = get_user_info('用户ID', cookies)
save_to_csv([user_info], 'user_info.csv')

5.2 存储到MySQL数据库

import pymysql

def save_to_mysql(data, table_name):
    connection = pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='weibo_data',
        charset='utf8mb4'
    )
    
    try:
        with connection.cursor() as cursor:
            # 动态生成SQL
            keys = ', '.join(data[0].keys())
            values = ', '.join(['%s'] * len(data[0]))
            sql = f"INSERT INTO {table_name} ({keys}) VALUES ({values})"
            
            # 批量插入
            cursor.executemany(sql, [tuple(item.values()) for item in data])
            connection.commit()
    finally:
        connection.close()

# 使用前需要先创建表结构

六、完整案例演示

# 配置你的Cookie
WEIBO_COOKIES = {
    'SUB': '你的SUB值',
    'SUHB': '你的SUHB值'
}

# 1. 获取用户基本信息
user_id = '1669879400'  # 示例:人民日报微博
user_info = get_user_info(user_id, WEIBO_COOKIES)
print(user_info)

# 2. 获取前5页微博
all_weibos = []
for page in range(1, 6):
    weibos = get_weibo_list(user_id, page, WEIBO_COOKIES)
    all_weibos.extend(weibos)
    print(f"已获取第{page}页,共{len(weibos)}条微博")
    time.sleep(2)  # 适当延迟

# 3. 保存结果
save_to_csv(all_weibos, 'weibo_content.csv')

# 4. 获取第一条微博的评论
if len(all_weibos) > 0:
    first_weibo_id = all_weibos[0]['id']
    comments = get_weibo_comments(first_weibo_id, 1, WEIBO_COOKIES)
    save_to_csv(comments, 'weibo_comments.csv')

七、注意事项与法律提示
遵守Robots协议:微博的robots.txt规定了爬虫限制范围

控制爬取频率:建议间隔3秒以上,避免对服务器造成压力

数据使用限制:爬取的数据仅可用于个人学习研究

隐私保护:不要爬取和存储用户敏感信息

商业用途:如需商用请获取微博官方API授权

八、常见问题解答
Q1:为什么获取不到数据?
A1:可能原因:Cookie失效、请求频率过高、IP被封。建议更换Cookie,使用代理IP,增加请求间隔。

Q2:如何获取更多历史微博?
A2:微博网页端只显示有限历史记录,可通过手机端接口或付费API获取更早数据。

Q3:遇到验证码怎么办?
A3:可以:1) 手动输入验证码 2) 使用打码平台 3) 降低请求频率

Q4:数据出现乱码如何解决?
A4:确保使用UTF-8编码,存储CSV时使用utf_8_sig,MySQL使用utf8mb4字符集。

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里领取!】
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

从零开始构建微博爬虫:实现自动获取并保存微博内容 功能全面:支持爬取用户基本信息、微博内容和图片性能优化:实现了请求延迟、自动重试机制,避免被封IP易于使用:提供简洁的命令行接口,支持多种参数配置数据存储:支持CSV和JSON两种格式保存数据容错机制:完善的错误处理,增强爬虫稳定性自定义配置:通过配置文件灵活调整爬虫行为本文详细介绍了一个功能完善的微博爬虫的设计与实现过程。通过这个项目,我们不仅实现了微博内容的自动获取和保存,也学习了爬虫开发中的各种技术要点和最佳实践。希望这个项目能对有类似需求的读者提供帮助和启发。 阅读详情

相关推荐

爬取某个微博用户的所有微博内容及照片

ajax爬取某个微博用户所有微博内容及图片教程

<Hunter> 7585

Python爬虫 | 爬取微博和哔哩哔哩数据

利用python爬取b站和微博的一些数据并进行可视化

天下弈星~的博客 2万+

python爬取微博数据

使用python爬取微博数据,使用的代理是蜻蜓代理的隧道代理,包天17元。使用的是request库。有些网页因为网络等原因打不开,总共获取到了76000+数据,没有爬取评论。评论部分的代码调试没有问题,在实际爬取的时候总是报错,可以确定的是代码没问题,可能是网页的问题,可以加一个异常处理,不想写了,评论爬下来也没有很大价值。 这次爬取给我最大的感受就是不可能爬到所有信息,之前没加异常处理总是爬到一...

weixin_46660582的博客 2498

六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。

大模型工程师老蓝的博客 1万+

基于Python实现的微博POI信息爬取

微博爬虫系列之POI信息爬取,通过Python request库实现。

青木(qingmu2048)的心情随笔 1360

Python 爬虫实战:微博用户数据爬取

微博作为国内最大的社交媒体平台之一,蕴含着大量有价值的公开数据。本文将详细介绍如何使用 Python 爬取微博数据,包括环境搭建、登录模拟、数据抓取、反爬应对、数据存储等完整流程。

yansideyucsdn的博客 2586

【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析

微博数据抓取并对数据进行情绪分析微博数据爬虫开始爬虫之前请先了解代码实现文本情绪分析 本文包含内容:借助Python抓取微博数据,并对抓取的数据进行情绪分析 代码实现:微博用户的行为与情感分析 微博数据爬虫 开始爬虫之前请先了解 Q:有哪些微博提供的数据是我们可以利用的? A:微博数据可以分为几类:博文相关数据,用户信息数据,单条微博评论数据,社交关系网络数据。其中 博文相关数据包括:微博的UR...

cindy_1102的博客 3万+

Python爬取微博数据并写入文件和数据库.zip

写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。因为内容太多,这里不再赘述,详细内容见获取到的字段。如果只需要用户信息,可以通过设置实现只爬取微博用户信息的功能。本程序需设置cookie来获取微博访问权限,后面会讲解如何获取cookie。如果不想设置cookie,可以使用免cookie版,二者功能类似。 详细介绍参考:https://blog.youkuaiyun.com/newlw/article/details/132594857

python爬取微博用户信息(六)—— 完整代码

本节为爬取微博用户信息的完整代码,以及项目结构。 感兴趣的小伙伴可以收藏哦! 另外,关于本代码的效果展示,以及教程,点击以下链接即可。 python爬取微博用户信息(一)—— 效果展示 python爬取微博用户信息(二)—— cookie的获取方式以及configs中参数的设置 目录 一、文件结构 二、代码 1、configs.py 2、main.py 3、MicroBlog.py 一、文件结构 项目名称:Crawling of microblog information C.

D77的博客 9597

第二章 零差云控关节模组内部构造

对零差云控的eRob70I进行了拆解

SFY__优快云的博客 5969

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 390

Python爬取微博签到数据(2025年3月更)

这是一篇用python爬取微博签到数据的爬虫教程,不建议没有爬虫基础的小伙伴食用惹,因为代码我用Ai润色过,所以看起来会比较复杂繁琐!教程并没有怎么参考现有的文章,所以很多东西都是自己瞎诌嘿嘿。

abcbbbd的博客 4659

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8609

爬虫实战: Python爬取微博评论数据

在数据科学和网络爬虫的领域中,采集社交媒体的数据是非常普遍且重要的一环。今天,我们以微博为例,介绍如何使用Python爬取评论数据,并将其存储到文件中。本文将从爬取目标、所涉及知识点、步骤分析、爬取结果和完整代码五个模块来详细阐述。通过本文的介绍,我们了解了如何使用Python爬取微博的评论数据,并将数据有效存储到Excel中。在实际应用中,爬虫技术能够为我们的数据分析提供丰富的信息。希望读者能够根据本文的示例,进一步探索和扩展自己的数据爬取项目!如果您有任何问题或心得,欢迎在评论区分享。

2301_78150559的博客 4813

LE AUDIO---Volume Control Service

LE AUDIO---Volume Control Service

weixin_42162924的博客 163

大疆前端开发面试题及参考答案(4万字长文)

在前端项目中,难点和性能优化的挑战无处不在。比如在处理复杂交互界面时,实现流畅的动画效果和实时反馈就是一大难点。当界面中有大量元素需要同时进行交互和动态更新,像电商平台的商品筛选和排序功能,不仅要保证操作的即时响应,还要确保界面在各种设备和网络环境下的稳定性,这就需要对事件处理、DOM 操作和数据更新机制有深入理解。在性能优化方面,首屏加载速度是常见的难点。当页面包含大量图片、脚本和样式文件时,如何合理地进行资源压缩、合并与缓存,以减少加载时间,是需要精心考虑的。

大模型大数据攻城狮的专栏 1155

Python爬取微博数据实战教程:从入门到进阶

本文从基础到进阶讲解了微博数据爬取的多种方法,涵盖了网页解析、API调用、数据存储等关键环节。实际开发中,建议结合具体需求选择合适的方案,并始终遵守相关法律法规。微博作为中国最大的社交媒体平台之一,蕴含着丰富的用户行为数据和舆情信息。本文将带你使用Python实现微博数据爬取,涵盖基础爬虫到反反爬策略的完整解决方案。频率控制:微博有严格的频率限制,建议设置3秒以上的请求间隔。数据清洗:微博正文包含HTML标签和表情符号,需要特殊处理。更新维护:微博前端结构经常变动,爬虫需要定期更新。6.1 使用代理IP。

Python_trys的博客 2853

CodeQL查询时遇到报错:A fatal error occurred: Could not process query metadata for...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1084

python爬取微博数据代码_Python selenium爬取微博数据代码实例

爬取某人的微博数据,把某人所有时间段的微博数据都爬下来。具体思路:创建driver-----get网页----找到并提取信息-----保存csv----翻页----get网页(开始循环)----...----没有“下一页”就结束,用了while True,没用自我调用函数嘟大海的微博:https://weibo.com/u/1623915527办公室小野的微博:https://weibo.com/...

weixin_39777404的博客 1195

RK3568笔记五十四:SORT实时目标追踪

YOLOv5具备目标检测的功能,把视频分解成多幅图像并逐帧执行时,如果视频帧中有多个目标,如何知道一帧中的目标和上一帧是同一个对象就是目标跟踪的工作。DeepSort是实现目标跟踪的算法,从sort(simple online and realtime tracking)演变而来,使用卡尔曼滤波器预测所检测对象的运动轨迹,匈牙利算法将它们与新的检测目标相匹配。结合YOLOv5和DeepSORT可以在实时场景中实现高效的目标检测和跟踪。

789

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python爬虫—爬取微博评论数据

下面我将详细讲解如何使用Python爬取微博评论数据,包括完整的代码实现和分步骤解释。

2301_78096295的博客 3292

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python怎么爬取新浪微博数据_新浪微博爬虫,用python爬取新浪微博数据

Weibo Spider本程序可以连续爬取一个或多个新浪微博用户(如胡歌、迪丽热巴、郭碧婷)的数据,并将结果信息写入文件或数据库。写入信息几乎包括用户微博的所有数据,包括用户信息和微博信息两大类。因为内容太多,这里不再赘述,详细内容见获取到的字段。如果只需要用户信息,可以通过设置实现只爬取微博用户信息的功能。本程序需设置cookie来获取微博访问权限,后面会讲解如何获取cookie。如果不想设置...

weixin_39747293的博客 3709

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python爬取微博评论(无重复数据)

python爬取微博评论(无重复数据) 前言 一、整体思路 二、获取微博地址 1、获取ajax地址2、解析页面中的微博地址3、获取指定用户微博地址 三、获取主评论 四、获取子评论 1、解析子评论2、获取子评论 五、主函数调用 1、导入相关库2、主函数执行3、结果 写在最后 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,

Python_sn的博客 4092

【Python爬虫五十个小案例】微博热点爬取小案例~

博客主页:小馒头学python本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例微博热搜是反映社会热点的重要风向标,包含了最新的事件动态和社会趋势。爬取微博热搜数据,不仅有助于深入理解社交媒体的传播规律,还可以为热点预测和舆论分析提供支持。本篇教程将从基础环境配置到代码实现,带你一步步完成微博热搜爬虫Python 环境 开发工具微博热搜榜可以通过以下网址访问:微博热搜榜。 页面核心元素结构:HTML Table:热搜数据以表格形式展示,每行包含排名、关键词和热度 链接路径:

null18的博客 1620
上一篇: Python开发者必须掌握的10个核心库
下一篇: Python从入门到精通:10个实战脚本带你飞跃成长
Python_trys
博客等级 码龄2年 4369粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值