第2章 数据抓取
在上一章中,我们构建了一个爬虫,可以通过跟踪链接的方式下载我们所需的网页。虽然这个例子很有意思,却不够实用,因为爬虫在下载网页之后又将结果丢弃掉了。现在,我们需要让这个爬虫从每个网页中抽取一些数据,然后实现某些事情,这种做法也被称为抓取(scraping)。
首先,我们会介绍一个叫做Firebug Lite的浏览器扩展,用于检查网页内容,如果你有一些网络开发背景的话,可能已经对该扩展十分熟悉了。然后,我们会介绍三种抽取网页数据的方法,分别是正则表达式、Beautiful Soup和lxml。最后,我们将对比这三种数据抓取方法。
2.1 分析网页
想要了解一个网页的结构如何,可以使用查看源代码的方法。在大多数浏览器中,都可以在页面上右键单击选择View page source选项,获取网页的源代码,如图2.1所示。
我们可以在HTML的下述代码中找到我们感兴趣的数据。
<table>
<tr id="places_national_flag__row"><td class="w2p_fl"><label
for="places_national_flag"
id="places_national_flag__label">National Flag:
</label></td><td class="w2p_fw"><img
src="/places/static/images/flags/gb.png" /></td><td
class="w2p_fc"></td></tr>
...
<tr id="places_neighbours__row"><td class="w2p_fl"><label
for="places_neighbours"
id="places_neighbours__label">Neighbours: </label></td><td
class="w2p_fw"><div><a href="/iso/IE">IE </a></div></td><td
class="w2p_fc"></td></tr></table>
对于浏览器解析而言,缺失空白符和格式并无大碍,但在我们阅读时则会造成一定困难。要想更好地理解该表格,我们将使用Firebug Lite扩展。该扩展适用于所有浏览器,我们可以通过https://getfirebug.com/firebuglite 页面获取到该扩展。如果愿意的话,Firefox用户可以安装完整版的Firebug扩展,不过Lite版本已经包含了我们在本章和第6章中所用到的功能。
Firebug Lite安装完成后,可以右键单击我们在抓取中感兴趣的网页部分,然后在菜单中选择Inspect with Firebug Lite,如图2.2所示。
此时,浏览器就会打开如图2.3所示的Firebug面板,并显示选中元素周围的HTML层次结构。
如图2.3所示,当选择国家面积这一属性时,我们可以从Firebug面板中清晰地看到,该值包含在class为w2p_fw的
元素中,而元素又是ID为places_area__row的