今天在进一步做腾讯微博内容抓取的时候,如何循环抓取多页的内容是个小难点。新浪的内容分页主要是三页式异步加载,而腾讯的分为两种方式:一种是常规的1,2,3,4,....下一页的方式,二种是,类似于新浪分页的三段式分页加载。在此主要说下腾讯微博的内容分页采集问题。
1、若是常规的1,2,3,4,....下一页的方式,此种较简单,只需要反复使用首页的抽取模式即可,无需重新抽取的请求URL和正则模板。
2、若为滚动的3页氏的话,腾讯还是做了两点与新浪的不同,下面我们从请求的URL中找到解决方法。
首页:http://t.qq.com/erliang20088?preview
第2页:http://api1.t.qq.com/asyn/index.php?&time=1352962925&page=2&id=147979107428584&u=erliang20088&apiType=8&apiHost=http%3A%2F%2Fapi.t.qq.com&_r=1354290218617
第3页:http://api1.t.qq.com/asyn/index.php?&time=1347802546&page=3&id=74429075748631&u=erliang20088&apiType=8&apiHost=http%3A%2F%2Fapi.t.qq.com&_r=1354290226952
第4页:http://api1.t.qq.com/asyn/index.php?&time=1343908544&page=4&id=110770072108318&u=erliang20088&apiType=8&apiHost=http%3A%2F%2Fapi.t.qq.com&_r=1354290236232
很容易发现其中的几个参数,但是这几个参数是如何取值的呢?
像以前的几个请求中,time参数往往无用可不设或随意设置,但此处的ajax获取是不行的,经过几次尝试你会发现,这里的time传值往往都会返回值,但是返回的值却不是正常想要的值。这说明该值的传递是要遵守规则。经过反复的实验发现,
(重点**)其实这里的time和id都是取自于当上一页中,最后一条显示的微言内容的time和id参数,当如实模拟传递之后,微博内容全部准确,反复测试依然完全正确,得到正常答案。
3、是如何解析ajax异步请求回来的数据?
如图,很显然这里返回的是一个json串,其内容部分info属性对应的json中的talk属性中,其实质数据内容是一个JSONArray,只需经过两步json解析即可获得每页15条记录的详细内容及相关参数,如转发、评论等。info对应的json中也包含了hasNext属性,用来标志是否还有“更多”页等参数。
至此,腾讯微博关于微博内容的全量翻页获取的关键问题都已解决,希望对学习中的同志们有帮助。