注册
登录
提问时间:2016/6/30 20:34:47    楼主:未知网友   阅读量:6249
想在新浪微博上爬某个大V的所有微博数据,现在考虑的是用新浪的API来爬(http://open.weibo.com/wiki/2/statuses/user_timeline),但是发现最多只能爬2000条,有什么方法能把所有的数据都爬下来吗?
通过模拟登陆?
1楼(站大爷用户)

正巧,读研期间为了完成课题写了一个java版的新浪微博爬虫,现在告诉一些题主与具体语言无关的困难。
1.登录,这是编写这个爬虫唯一也是最大的难点,当时(2013年10月份)新浪微博的登录会对用户名进行base64加密,对密码进行rsa2加密,而且登录流程比较繁杂会经过好几次请求转发,都是使用javascript来控制的,具体流程忘记了,但是我要说的是,我辛辛苦苦研究出来的模拟登录,很快就不能用了,我在爬数据的1个月内一直可以登录,在爬够我需要的数据后过了大概4个月,就死活登录不上去了,具体什么原因我没有研究过,貌似是新浪微博那边改版了,而且貌似新浪微博的登录改版比较频繁。
2.访问频率控制,我的访问频率控制在每秒5次(也就是每秒只向新浪微博的服务器发送5次请求),即便这样,仍然会出现ip被封,请求不到任何数据的情况,即使用上代理IP。
3.你在连续访问某个大V的微博数据,即使是人工使用鼠标点击去访问,如果在短时间内浏览过11页(貌似是这个数字,记不清了)后,每页应该是45条,就会限制你的访问。
总之,新浪微博的反爬虫做的非常好,抓一点玩玩还可以,我那个爬虫最后也就抓了5000多万条,每一个大V的数据最多就抓了11*45条。
2楼(匿名用户)

我研究过新浪微博的抓取,有需要的可以联系我
xchaoinfo@qq.com
3楼(未知网友)

请问你是用的SDK爬的数据吗?求指教。我得到了Accesstaken,但是不知道后来怎么获得数据,申请的应用需要审核通过吗?
4楼(未知网友)

如果只爬一个的话,效率上要求不高的话,推荐直接上selenium吧。
直接调用firefox爬,在firefox里登录你自己的微博就可以了。
5楼(未知网友)

我只想问一句现在爬别人微博的API还能用?貌似需要授权吧
6楼(未知网友)

谢邀。先上结论,通过公开的api如果想爬到某大v的所有数据,需要满足以下两个条件:

1、在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000,twitter是3200。
2、爬虫程序必须不间断运行。

新浪微博的api基本完全照搬twitter,其中接口的参数特性与底层的NoSQL密不可分,建议先看点Nosql数据库的设计理念有助于更好的理解api设计。

一般来说,如果决定爬某个大v,第一步先试获取该用户的基本信息,中间会包含一条最新的status,记下其中的id号作为基准,命名为baseId。

接口中最重要的两个参数:

since_id:返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
max_id:返回ID小于或等于max_id的微博,默认为0。

出于各种原因,获取statuses的接口,固定为按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假设该微博第一天上线,就一个用户,发了一百条,id是1到100。而你在该用户发了第50条的时候开始运行的爬虫,即baseId=50。

假设按每次获取10条历史数据递归,先将max_id设为baseId,获取该用户id为41-50的微博,再将max_id设为41重复循环,直到返回微博数量为1或0。这步没有问题。

获取用户最新的statuses就有些蛋疼了,since_id=50,同样获取10条数据,返回的并不是id值为51-60的数据,而是100-91的数据。简单说就是你没法从since_id逐步更新到用户当前status,而是得一口气从用户当前status更新到上次爬虫运行时得到的最后一条status。假设你的爬虫一个月才运行一次,该用户在这期间发了2300条微博,根据限制你只能更新2000条,这其中最老的300条在你的系统内就会出现“断档”。

最后一条,以上只针对公开的api,stackoverflow上twitter API可以申请权限突破数量限制和更改排序机制,微博也应该有类似机制。
7楼(站大爷用户)

@王川 的回答是使用了api的方法,我说一下使用爬虫的思路。

我以前爬取了各大社交网站的数据,如人人,新浪,腾讯。
我当时需要爬取了所有大V的信息。我首先pass了api的方案,因为api的数量限制,不可能让我大规模的抓取数据。

第一种是直接get json信息。我觉一个例子。

我需要爬取 清华南都 的微博。(清华南都的微博)

1. 首先获取他的id
http://weibo.com/p/1005052309846073 可以看到,她的 id 是 1005052309846073

2. 分析微博的请求
我们分析微博的请求可以发现,网站通过
http://m.weibo.cn/page/json?containerid=1005052309846073_-_WEIBO_SECOND_PROFILE_WEIBO&page=4 发送内容的

转义后的内容是

{
"ok": 1,
"count": 37227,
"cards": [{
"mod_type": "mod\/pagelist",
"previous_cursor": "",
"next_cursor": "",
"card_group": [{
"card_type": 9,
"mblog": {
"created_at": "08-27 19:40",
"id": 3880537095622460,
"mid": "3880537095622460",
"idstr": "3880537095622460",
"text": "一切都是最好的安排",
"source_allowclick": 0,
"source_type": 1,
"source": "微博 weibo.com",
"favorited": false,
"pic_ids": ["89ad7439jw1evhaklwa9uj20c82feqf8"],
"thumbnail_pic": "http:\/\/ww4.sinaimg.cn\/thumbnail\/89ad7439jw1evhaklwa9uj20c82feqf8.jpg",
"bmiddle_pic": "http:\/\/ww4.sinaimg.cn\/bmiddle\/89ad7439jw1evhaklwa9uj20c82feqf8.jpg",
"original_pic": "http:\/\/ww4.sinaimg.cn\/large\/89ad7439jw1evhaklwa9uj20c82feqf8.jpg",
"user": {},
"reposts_count": 230,
"comments_count": 25,
"attitudes_count": 227,
"mlevel": 0,
"visible": {},
"biz_feature": 0,
"userType": 0,
"mblogtype": 0,
"created_timestamp": 1440675603,
"bid": "CxN8xnAEQ",
"pics": [{}],
"like_count": 227,
"attitudes_status": 0
}
},
后面还有好多好多好多好多好多好多好多好多好多好多好多好多的内容。。。我删掉了后面的部分
]
}]
}