前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何开发一套日抓取微博2000w+的微博爬虫(第一部分)

如何开发一套日抓取微博2000w+的微博爬虫(第一部分)

原创
作者头像
用户1057405
修改2019-01-18 16:03:19
1.4K0
修改2019-01-18 16:03:19
举报
文章被收录于专栏:爬虫爬虫

废话不多说,先上图证明

上图是公司的内部系统,可以看到,查询的条件是发布时间,因此,1月17日这天的抓取量是1674万,接近于2000万,如果采集系统的节点投入多一点,达到2000万是毫无问题的。

先说说我的配置:微博爬虫一共使用7台服务器,配置都为4核8G 7M带宽 的腾讯云服务器,一年的费用大概在8万多元RMB。开始切入爬虫的技术

一.微博会封锁ip

微博会对访问的ip做出访问速度的限制,如果一个ip访问的速度过快,该ip会被封掉,因此在采集的过程中,需要使用到代理ip,我使用的代理ip为亿牛云,代理ip传输门

二.微博id是有迹可寻的

微博id一共有两种,一种是长id,类似于4329766707830771,一种是短id,类似于Hc51trvIN,在2018年的年尾,微博的开发人员对长id与短id的转换做了调整,目前长id与短id的转换规则未知,但这不是重点,重点是长id是可以遍历的

看图:

不知道读者们看出规律没有,这些查询出来的数据发布时间是一致的,也就是说,微博长id的前面14为与时间戳和微博内部的校验有关,二后面的部分,数值应该是无规律随机分布

三.从微博中获得一个能校验微博id是否为真的接口,即如何判定我们生成的微博id在新浪微博中存在,而这个接口必须要满足:不封ip,响应速度快;经过笔者对新浪微博的长期研究,发现了一个合适的接口可以当做校验使用,这个接口便是微博的投诉页面:

链接如下:http://service.account.weibo.com/reportspam?rid=4328823463760630&from=10106&type=1&url=%2Fdengchao&bottomnav=1&wvr=5

其中的rid即为微博长id;而这个链接经过笔者的试验,无论以多快的速度,无论开多少线程去访问都不会被封ip,而且访问速度上佳

四.微博按账户采集程序的设计

微博数据采集的基石是按账户采集,目前的采集方式有新浪微博的h5端,安卓手机端,pc web端,其中,pc web端的数据返回格式是非格式化的,微博的pc web的微博数据全部糅杂在一段html中,对采集的解析极其不友好

而h5端和app端是直接返回的json数据,你获取到了就可直接当做自己的:

因此,按账户采集数据,我首先选择的是从h5端和app端入手,而在18年之后,新浪在app端开始升级,对访问限制越来越严格导致代理ip资源越来越容易被封,在2019年年初,我的几台采集节点大多是这样子:

ip代理资源是越来越稀贵啊,而h5端,安卓手机端,pc web端这三个端,封ip是互不影响的,且封锁ip的严重程度排名是 h5端>安卓手机端>pc web端,因此,我对微博爬虫的逻辑进行了修改,首先对账户进行判断,使用的pc web端,先判断该账户是否当日发布过微博,如果发布过,则使用h5端或安卓手机端的接口对其进行数据采集,如果未发布,则直接跳过该账户,加上该逻辑后,程序输出是这样的:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档