当有大量链接需要爬取时,爬取链接的任务可以交给webPageCollector
,它可以高效的完成爬取任务,并保证爬到的数据包含完整的网页内容,利用它可以代替大量调用urlopen函数的情况。webPageCollector
特别适合爬取单一大型网站(例如爬取美团上所有的店家信息),程序中对此情况的域名解析进行了优化。使用webPageCollector构造的高效美团爬虫
- 实验数据:3154个美团店家主页地址
- 实验环境:网速4Mb/s
- 实验一:
webPageCollector
- 成功爬取3135个店家主页,漏爬率0.6%
- 耗时868秒
- 成功爬取3135个店家主页,漏爬率0.6%
- 实验二:
单线程调用urlopen函数
- 成功爬取3140个店家主页,漏爬率0.44%
- 耗时4614秒
- 成功爬取3140个店家主页,漏爬率0.44%
- 实验结果:
- 时间效率上,使用
webPageCollector
是使用单线程调用urlopen函数
的 5.31倍 - 漏爬率,使用
webPageCollector
比使用单线程调用urlopen函数
高 0.16%
- 时间效率上,使用
在 Linux 3.13 内核上可正常运行
Linux 2.6 或以上版本的内核应该也可以运行
from webPageCollector import WebPageCollector
# 加载800个美团店家的URL地址
urls = open("urls.txt", "rb").read().strip().split()
# 创建爬虫
crawler = WebPageCollector()
# 设置URL
crawler.set_urls(urls)
# 开始爬取
crawler.start()
# 接收并输出爬取到的数据
while True:
item = crawler.pop()
# item为None表是爬取结束
if item == None:
break
(url, data) = item
print url
print data
注意!:
1) webPageCollector只负责请求并完整接收服务器数据,对数据的解析需要用户完成
2) webPageCollector不会对URL进行去重,对URL去重是用户的职责
HTTP 1.1
协议GET
请求
HTTP 301
和HTTP 302
重定向
Https
协议
被墙
的网页
[email protected] test