网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
优采云 发布时间: 2022-01-25 12:22网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
微博爬虫,单机每天千万级数据&&吐血整理微博爬虫总结
前言
早前我发表了一篇博客微博爬虫,每天上百万条数据,并在Github上开源了代码,后来很多人联系我,还有一些公众号转载了这个文章。
但是,对于微博爬虫,我还是很内疚的,因为账号池的问题还没有解决,所以每天百万数据里都有水。仅仅爬取好友关系,这个简单的数据就可以达到数百万。如果你抓取关键词搜索过的微博,或者一个人的所有微博,都达不到百万级数据量。
但既然坑已经埋了,就必须要填上!所以自从写了那篇文章之后,我就一直想打造一个稳定的单机千万级每日微博抓取系统。
值得庆祝的是,这个问题现在已经完全解决了!对微博爬虫也有了更深的了解!
微博网站分析
目前共有三个微博网站:
可以看出,这三个站点的复杂度在逐渐增加。很显然,如果你能爬到最简单的完成,你肯定不会爬复杂的,但实际上,有些只能爬复杂的。!
什么任务不能完成?可以说,抢一个人的所有微博,抢朋友,抢个人信息,这一切都可以在这个网站上完成。
但是,有一个任务是无法完成的,那就是高级搜索
微博高级搜索
也许你经常有这样的需求。比如最近疫苗事件的兴起,你需要抓住7月10日到7月20日这个时间段,提一下疫苗的关键词微博。
这其实是一个非常刚性的要求,需要使用微博的高级搜索来完成。
对于高级搜索界面,三个微博网站的情况是:
高级搜索条目:
可以看到这里可以过滤的条件有,类型,用户,时间,注意这里的时间是以天为单位的。
以下是对 关键词 疫苗的特定搜索
可以看到一页有10条搜索结果,最多显示100页,也就是1000条结果。
因此,搜索结果最多会返回1000条微博,
本站的时间单位是天,比如搜索时间段是10天,那么最多可以抓取10*1000=10000条数据。
不幸的是,这个网站没有高级搜索界面
高级搜索条目:
可以看到这里可以过滤的条件有类型、用户、时间、地区。请注意,这里的时间以小时为单位。
本站一页有20条微博,最多50页,所以一次搜索最多也能返回1000条微博数据
但是这个网站的时间单位是小时,
所以比如搜索时间段是10天,那么最多可以抓取10*24*1000=240000条数据。
总结
所以可能只需要高级搜索,而且你需要的搜索结果数据非常大,而且过滤条件非常精细,比如地区,其他爬虫需求都可以通过本站抓取,包括比较粗略的高级搜索
微博爬取经验总结
还是传统的验证码,5位数字和字母的组合
这个验证码可以通过扫码平台来解决。具体登录代码请参考这里
但是,由于您购买的小号可能会因为操作频繁而被微博盯上,所以登录时账号异常,会生成一个非常恶心的验证码,如下图。
遇到这种情况,建议你放弃治疗,不要想着破解这个验证码,所以你平时买的小号也不是100%可用的,还有一些是异常账号!
打造千万级爬虫系统
基于以上分析,如果要搭建千万级爬虫系统,只需要做一件事,搭建一个账户池。
建立账户池的步骤也很简单:
1. 购买批量帐户
2. 登录微博并保存cookie
在这两个步骤中,对于每个后续请求,只需从帐户池中随机选择一个帐户即可。
这两个站点的cookies是不同的,所以我们需要建立两个账户池,一个给cn站点,一个给com站点。
这时候,结合我之前写的项目WeiboSpider,就可以轻松实现每日百万级数据抓取!
注意这里的实际爬取速度与你的账户池大小和电脑带宽有很大关系。如果账户池不大,请求间隔延迟会稍微长一些。如果带宽小,每个请求的耗时也会长一点
我的数据是
账户池中有 230 个账户,每个请求的延迟为 0.1 秒,每天可以实现 2-300 万个获取结果。
冲刺到千万
一直以为我上面搭建的爬虫占用了带宽!
有一次,我启动了另一个爬虫,发现另一个爬虫也可以达到每天2到300万的爬行速度。同时,之前的爬虫也在以每天2到300万的爬行速度运行。
所以,只是CPU在限制爬虫的爬取量,而不是网络IO!
所以你只需要使用多进程优化。这里推荐使用 Redis-Scrapy。所有爬虫共享一个 Redis 队列,通过 Redis 将 URL 统一分配给爬虫,Redis 是一个分布式爬虫系统。
它可以部署在不同的机器上(如果一台机器的带宽/CPU已满),或者只是在一台机器上打开多个进程。
就这样,开了5个进程,不敢再开多了,毕竟账户池还是200多。
那么结果是:
一分钟可抓8000条数据,一天可抓1100万+
抓取系统目前运行稳定
因此,最初的目标已经实现,一个千万级的微博爬虫系统
总结
至此,可以说微博爬虫的所有问题都彻底解决了!!!
开源代码在这里,你需要添加自己的帐户池。