我有一个相当长的网站列表,我想下载它 登陆(index.html或同等)页面。我目前正在使用Scrapy(非常喜欢它背后的人 - 这是一个神话般的框架)。 Scrapy在这个特定的任务上比我想要的慢,我想知道wget或其他替代方案是否会更快,因为任务是多么简单。有任何想法吗?
(这是我在Scrapy所做的事情。我可以做些什么来优化scrapy来完成这项任务?)
所以,我有一个像
这样的起始网址列表start_urls = [google.com yahoo.com aol.com]
我从每个响应中删除文本并将其存储在xml中。我需要关闭offsitemiddleware以允许多个域。
Scrapy按预期工作,但看起来很慢(每小时约1000或1 每4秒一次)。有没有办法通过增加来加快速度 运行单个时CONCURRENT_REQUESTS_PER_SPIDER的数量 蜘蛛?还要别的吗?
答案 0 :(得分: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
(这会更好,因为它处理格式不正确的标记)。