Scrapy - 允许媒体管道下载已下载的URL

时间:2015-01-03 11:16:27

标签: python web-scraping scrapy

我正在使用媒体管道将各种文件下载到磁盘,但它似乎阻止了以前下载的文件的下载(使用相同的URL)。我不希望它不这样做,我希望下载重复的图像(它们用不同的文件名编写)。有什么方法可以覆盖此行为并允许媒体管道处理相同的URL?

(使用scrapy 0.24)

1 个答案:

答案 0 :(得分:1)

我查看了媒体管道中使用的类,看来任何媒体请求的指纹都可以避免下载重复项。

scrapy/scrapy/utils/request.py中,request_fingerprint方法描述了创建请求的sha1哈希值,包括请求头等数据。

为了允许重复请求,我在标题值中包含了一个对项目唯一的数据(以生成唯一的指纹),如下所示:

def get_media_requests(self, item, info):
    if isinstance(item, ExampleMedia):
        request = Request("http://example.com/medialibrary/"+str(item['mediaID']))
        request.meta['item'] = item
        request.headers['fpBuster']=item['uniqueID']
        yield request

我希望这可以帮助其他人寻找下载媒体重复请求的方法。如果有一种方法可以做到这一点,而不是使用像这样的标题,我想,一个意想不到的标题可能有可能混淆目标网站。如果有人有更好的解决方案,请告诉我。