第 7 章 JavaScript动态渲染页面爬取
在第 5 章中,我们了解了 Ajax 数据的分析和爬取方式,这其实也是 JavaScript 动态喧染页面的一种情形,通过直接分析 Ajax,使我们仍然可以借助 requests 或 urllib 实现数据爬取。
不过 JavaScript 动态渲染的页面不止 Ajax 一种。例如,有些页面的分页部分由 JavaScript 生成,而非原始 HTML 代码,这其中并不包含 Ajax 请求。再例如 ECharts 的官方实例(详见 http://echarts.baidu.com/demo.html ),其图形都是经过 JavaScript 计算之后生成的。还有类似淘宝这种页面,即使是 Ajax 获取的数据,其 Ajax 接口中也含有很多加密参数,使我们难以直接找出规律,也很难直接通过分析 Ajax 爬取数据。
为了解决这些问题,我们可以直接模拟浏览器运行,然后爬取数据,这样就可以实现在浏览器中看到的内容是什么样,爬取的源码就是什么样一一所见即所爬。此时我们无须去管网页内部的 JavaScript 使用什么算法渲染页面,也不用管网页后台的 Ajax 接口到底含有哪些参数。
Python 提供了许多模拟浏览器运行的库,例如 Selenium、Splash、Pyppetter、Playwright 等,可以帮助我们实现所见即所爬,有了这些库,就不用再为如何爬取动态渲染的页面发愁了。