第5章 动态内容

根据联合国2006年的一项研究,73%的主流网站都在其重要功能中依赖JavaScript。诸如React、AngularJS、Ember、Node等使用JavaScript的模型-视图-控制器(MVC)框架的增长与流行,更加提高了JavaScript作为网页内容主流引擎的重要性。

和单页面应用的简单表单事件不同,使用JavaScript时,不再是加载后立即下载页面全部内容。这种架构会造成许多网页在浏览器中展示的内容可能不会出现在HTML源代码中,我们在前面介绍的抓取技术也就无法抽取网站的重要信息了。

对于这种动态的JavaScript网站,本章将会介绍两种抓取其数据的方法,分别是:

  • JavaScript逆向工程;
  • 渲染JavaScript。

让我们来看一个动态网页的例子。示例网站有一个搜索表单,可以通过http://example.python-scraping.com/search进行访问,该页面用于查询国家(或地区)。比如说,我们想要查找所有起始字母为A的国家(或地区),其搜索结果页面如图5.1所示。

\\fuwuqi6\YDStu\18-0069\0501.tif

图5.1

如果我们右键单击结果部分,使用浏览器工具查看元素(参见第2章),可以发现结果被存储在ID为“result”的div元素之中,如图5.2所示。

让我们尝试使用lxml模块抽取这些结果,这里用到的知识在第2章和第3章的Downloader类中都已经介绍过了。

>>> from lxml.html import fromstring ...

Get 用Python写网络爬虫(第2版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.