第4章 并发下载
在之前的章节中,我们的爬虫都是串行下载网页的,只有前一次下载完成之后才会启动新下载。在爬取规模较小的示例网站时,串行下载尚可应对,但面对大型网站时就会显得捉襟见肘了。在爬取拥有100万网页的大型网站时,假设我们以每秒一个网页的速度持续下载,耗时也要超过11天。如果我们可以同时下载多个网页,那么下载时间将会得到显著改善。
本章将介绍使用多线程和多进程这两种下载网页的方式,并将它们与串行下载的性能进行比较。
在本章中,我们将会介绍如下主题:
- 100万个网页;
- 串行爬虫;
- 多线程爬虫;
- 多进程爬虫。
4.1 100万个网页
想要测试并发下载的性能,最好要有一个大型的目标网站。为此,我们将使用Alexa提供的最受欢迎的100万个网站列表,该列表的排名根据安装了Alexa工具栏的用户得出。尽管只有少数用户使用了这个浏览器插件,其数据并不权威,但它能够为我们提供可以爬取的大列表,对于这个测试来说已经足够好了。
我们可以通过浏览Alexa网站获取该数据。此外,我们也可以通过http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
直接下载这一列表的压缩文件,这样就不用再去抓取Alexa网站的数据了。
4.1.1 解析Alexa列表
Alexa网站列表是以电子表格的形式提供的,表格中包含两列内容,分别是排名和域名,如图4.1所示。
图4.1
抽取数据包含如下4个步骤。
1.下载.zip
文件。
2.从.zip
文件中提取出CSV文件。 ...
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.