python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信...
发布网友
我来回答
共1个回答
热心网友
爬虫项目介绍
本项目基于Python的Scrapy框架,采用随机用户代理和IP代理等反爬技巧,将收集到的微博领域数据、各领域榜单博主信息和博主的微博信息分别存入MySQL数据库的相应表格。
查看完整代码请访问GitHub:
爬虫逻辑
2.1 获取微博领域信息
首先,爬取V影响力榜上所有微博领域名称及其对应的各领域微博榜单链接。
2.2 获取各领域榜单博主信息
进入各领域排行榜页面(如互联网榜),抓取4月月榜排名前100的博主信息。
分析网页得知,博主信息通过单独请求json文件获取。
请求的URL地址为:v6.bang.weibo.com/aj/we...
URL中__rnd字段的值由请求时间戳生成。
使用POST请求,并在表单中包含type、date、domainId等字段。
编写请求代码如下:
2.3 获得博主个人主页和发表微博信息
收集每个博主的昵称、ID、粉丝数、关注数、微博数、性别、地址等信息后,进入博主的微博主页,抓取最近60条微博信息(包括内容、发表日期、转发/点赞/评论数等)。
请求博主主页URL时需携带固定的cookie信息。
博主微博主页分析发现,发表的微博内容通过单独请求json文件获取。
json文件的URL很长,包含domain、pl_name、page_id、script_uri等字段。
请求方式为GET。
请求json文件后,将data值转化为Scrapy的Selector子类,使用CSS或XPath选择器获取所需信息。
爬虫代理设置
为了对抗微博的反爬策略,本项目使用随机更换User-Agent和IP地址的方法。
3.1 随机User-Agent
编写RandomUserAgentMiddleware中间件,使用fake-useragent生成UserAgent实例,为每次请求随机生成一个User-Agent。
具体代码在GitHub上。
3.2 随机IP
从蘑菇IP代理购买付费IP,生成API链接,处理返回的JSON文件提取IP信息,保存至MySQL数据库。Scrapy每次请求时从数据库随机获取一个有效IP。
通过变换IP地址发送请求,基本避免了被反爬。
爬取结果
异步保存至MySQL数据库,数据分别存入weibotopic、topicuser、weiboinfo三个表格。
weibotopic(38个领域):
topicuser(38个用户,有些领域榜单上可能不足100个用户):
weiboinfo(115740条微博)
小结
以上介绍了基于V影响力榜单爬取新浪微博信息的爬虫项目,代码在GitHub上公开,欢迎查看、交流。
后续文章将对收集到的数据进行统计分析和可视化展示,期待进一步的探索。