2

我有一个相当长的网站列表,我想下载它们的登陆(index.html 或等效)页面。我目前正在使用 Scrapy(非常喜欢它背后的人——这是一个很棒的框架)。Scrapy 在此特定任务上的速度比我想要的要慢,我想知道 wget 或其他替代方法是否会更快,因为该任务非常简单。有任何想法吗?

(这就是我用 Scrapy 做的事情。我能做些什么来优化这个任务的 scrapy 吗?)

所以,我有一个起始 URL 列表,例如

start_urls=[google.com yahoo.com aol.com]

我从每个响应中抓取文本并将其存储在 xml 中。我需要关闭异地中间件以允许多个域。

Scrapy 按预期工作,但似乎很慢(大约 1000 个一小时或每 4 秒 1 个)。有没有办法通过在运行单个蜘蛛时增加 CONCURRENT_REQUESTS_PER_SPIDER 的数量来加快速度?还要别的吗?

4

1 回答 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()

您也可以签出httplib2PycURL为您进行下载,而不是urllib.

我不清楚您希望将抓取的文本作为 xml 的外观如何,但您可以xml.etree.ElementTree从标准库中使用,也可以安装BeautifulSoup(这会更好,因为它可以处理格式错误的标记)。

于 2010-08-08T01:42:34.227 回答