刮取域列表的登录页面

时间:2010-03-23 16:46:17

标签: python screen-scraping scrapy

我有一个相当长的网站列表,我想下载它 登陆(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的数量 蜘蛛?还要别的吗?

1 个答案:

答案 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()

您还可以查看httplib2PycURL为您进行下载,而不是urllib

我不清楚你想要把剪切的文本看作xml,但你可以使用标准库中的xml.etree.ElementTree,或者你可以安装BeautifulSoup(这会更好,因为它处理格式不正确的标记)。