抓取一系列域名的着陆页

2 投票
1 回答
1202 浏览
提问于 2025-04-15 20:45

我有一长串网站,想下载它们的首页(就是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(这个更好,因为它能处理格式不正确的标记)。

撰写回答