我有一个相当长的网站列表,我想下载 登陆(index.html 或同等)页面。我目前正在使用 Scrapy(非常喜欢它背后的人——这是一个很棒的框架)。 Scrapy 在这个特定任务上比我想要的要慢,我想知道考虑到任务的简单性,wget 或其他替代方案是否会更快。有任何想法吗?
(这是我使用 Scrapy 所做的事情。我可以做些什么来优化 scrapy 来完成这项任务?)
所以,我有一个起始网址列表,例如
start_urls=[google.com 雅虎网站 美国在线]
我从每个响应中抓取文本并将其存储在 xml 中。我需要关闭场外中间件以允许多个域。
Scrapy 按预期工作,但似乎很慢(一小时内大约 1000 个或 1 每 4 秒)。有没有办法通过增加 运行单个进程时 CONCURRENT_REQUESTS_PER_SPIDER 的数量 蜘蛛?还要别的吗?
最佳答案
如果您想要一种使用 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
code> (这会更好,因为它可以处理格式错误的标记)。
关于python - 抓取域列表的登陆页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501838/