我有一大堆我想下载的网址(大约400K),我想使用scrapy的并发下载功能。我发现的最基本的管道示例太复杂了。
你能指点一个简单的例子,它会采用这样的列表:
url_list = ['http://www.example.com/index.html',
'http://www.something.com/index.html']
我将它们存储在这样的文件列表中:
file_list = ['../file1.html',
'../file2.html']
速率限制将是一个很好的奖励,以免超负荷服务器。
注意:如果有其他方法,则不需要使用scrapy。
答案 0 :(得分:1)
您可以修改此代码段以执行您想要的操作:
import requests
import grequests
def exception_handler(request, exception):
print "Request failed"
def chop(seq,size):
"""Chop a sequence into chunks of the given size."""
chunk = lambda i: seq[i:i+size]
return map(chunk,xrange(0,len(seq),size))
def get_chunk(chunk):
reqs = (grequests.get(u) for u in chunk)
foo = grequests.map(reqs)
for r in foo:
player_id = r.request.url.split('=')[-1]
print r.status_code, player_id, r.request.url, len(r.content)
open('data/%s.html' %player_id, 'w').write(r.content)
urls = [a.strip() for a in open('temp/urls.txt').read().split('\n') if a]
chunks = chop(urls, 150)
for chunk in chunks:
get_chunk(chunk)