抓取一系列域名的着陆页
我有一长串网站,想下载它们的首页(就是index.html或者类似的页面)。我现在在用Scrapy(非常喜欢这个工具,它真是个很棒的框架)。不过在这个任务上,Scrapy的速度比我希望的要慢,我在想用wget或者其他工具会不会更快,因为这个任务其实挺简单的。你有什么建议吗?
(这是我用Scrapy做的事情。我能做些什么来优化Scrapy以完成这个任务呢?)
我有一个起始网址的列表,比如:
start_urls=[google.com
yahoo.com
aol.com]
然后我从每个响应中抓取文本,并把这些信息存储在一个xml文件里。我需要关闭offsite中间件,以便可以处理多个域名。
Scrapy的工作效果如预期,但速度似乎有点慢(大约一个小时能处理1000个,也就是每4秒处理一个)。有没有办法通过增加每个爬虫的同时请求数量来加快速度,同时又只运行一个爬虫?还有其他方法吗?
1 个回答
4
如果你想用Python同时下载多个网站,可以使用标准库来实现,像这样:
import threading
import urllib
maxthreads = 4
sites = ['google.com', 'yahoo.com', ] # etc.
class Download(threading.Thread):
def run (self):
global sites
while sites:
site = sites.pop()
print "start", site
urllib.urlretrieve('http://' + site, site)
print "end ", site
for x in xrange(min(maxthreads, len(sites))):
Download().start()
你也可以试试 httplib2
或者 PycURL
,它们可以帮你下载,而不是用 urllib
。
我不太清楚你想要的抓取文本的XML格式是什么样的,不过你可以使用标准库里的 xml.etree.ElementTree
,或者安装 BeautifulSoup
(这个更好,因为它能处理格式不正确的标记)。