有几位简友留言问到简书首页数据的抓取问题,说只能抓取到20条数据,如何抓取到更多;简书首页数据分页加载是怎么样处理?
我用chrome -- 检查 -- network 分析一下,截图来说明。我是按这样的顺序来进行分析的。
- 弄清分页加载的方式
- 着重分析第2页url,找出构造url参数的规律
- 在第3页中验证
分页加载方式在前面文章中讲过,无非3种方式,简书首页采用的是滚动加载,直接滚动加载第2页,查看url进行分析:
构成第2页url中有20个id的参数,加上page=2,需要回到加载首页时看看这20个id是如何得到的。
发现就是文章<li>
的id,这个可以在第一次抓取时获得,这样就可以构造成第二页的一长串的URL
再验证一下第3页的URL,发现这个时候id的数量增加了。增加的是从哪里来的?
核对一下,这些id包含了前两次加载的页面的<li>
id值,这样构成第3页的url,在编写代码的过程中,我发现直接构造了这样的URL,还是不能抓取到第2页或第3页的数据,仍然是第一页的数据。从抓包和请求上查看,这时我已经构造了完整的请求的URL。
回过头来比较一下,第一次(首页)加载的数据和后面分页加载的数据有什么不同。
后面的分页加载的直接是xml数据,请求的是XMLHttpRequest,修改一下请求头headers,再次抓取,就会看到抓取的是分页数据了。
在这篇文章中 Python爬取数据的分页分析,简书七日热门和三十热门抓取时,网页结构基本与首页相似,我对URL做了简化处理,不影响数据的获取,为什么在抓取首页数据时要传递这么复杂的参数,大家可以思考一下。