python - Scrapy - 允许媒体管道下载已下载的网址

标签 python web-scraping scrapy

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

(使用scrapy 0.24)

最佳答案

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

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

为了允许重复请求,我在 header 值中包含了该项目特有的一段数据(以生成唯一的指纹),如下所示:

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

我希望这可以帮助其他正在寻找下载媒体重复请求的方法的人。如果有一种方法可以做到这一点而不需要使用像这样的 header ,那就太好了,因为我想,意外的 header 可能会混淆目标站点。如果有人有更好的解决方案请告诉我。

关于python - Scrapy - 允许媒体管道下载已下载的网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754231/

相关文章:

Php cURL 网页抓取

web-scraping - 如何使用剧作家捕捉特定的重定向?

android - 用于 Android 应用程序的 Java Web 抓取建议/帮助!

javascript - 如何使用splash和scrapy将变量从Lua脚本传递到Javascript?

redis - 如何设置scrapy-redis的设置以使用密码连接远程redis-server?

python - Django直接返回.html文件,根本不解析模板标签

python - 使用 PythonMagick 渲染 PNG 时如何设置背景颜色

python - 在基类的类方法中获取继承类名

python - 使用 pandas 部分取消透视表

python列表保留空项目