下载带有scrapy的网址列表,到文件名列表,具有限速功能

时间:2016-02-02 16:21:04

标签: python scrapy

我有一大堆我想下载的网址(大约400K),我想使用scrapy的并发下载功能。我发现的最基本的管道示例太复杂了。

你能指点一个简单的例子,它会采用这样的列表:

url_list = ['http://www.example.com/index.html',
            'http://www.something.com/index.html']

我将它们存储在这样的文件列表中:

file_list = ['../file1.html',
             '../file2.html']   

速率限制将是一个很好的奖励,以免超负荷服务器。

注意:如果有其他方法,则不需要使用scrapy。

1 个答案:

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