前言
可能很多同学看到关于动态页面的反爬(比如基于Ajax的网页)第一反应就是selenium+headless browser,这个方法好是好,然而是基于真实的浏览器,虽然没有界面,但是也占用很多内存。小型的测试用selenium的确不错,但是一旦业务量大起来了,需求复杂了,甚至需要分布式爬虫操作时,这个方法对于内存的开销实在受不了。
那么有不用selenium的方法吗?当然有,今天就教大家硬刚基于Ajax的动态页面,从js的源码里边分析,一步一步倒推出页面的产生过程,从而获取我们所需要爬取的元素。
正文
一般来说,页面产生内容有以下几种方式:
- 数据在页面内的js里边,由脚本动态渲染。直接右键查看源码搜索就能看到。
- 数据在其他的js文件里边,由脚本动态渲染。需要找到哪个js包含这些数据。
- 数据由Ajax生成,动态渲染。查看哪个XHR包含这些数据。
- 数据由jsonp生成,动态渲染。查看哪个Script包含这些数据。
现在我们来分析一个网站。http://pubs.rsc.org/。这是一个关于化学的论文期刊数据库网站,可以通过关键字搜索论文或者书籍等。