gpt4 book ai didi

python - Scrapy文件下载如何使用自定义文件名

转载 作者:太空狗 更新时间:2023-10-30 02:25:54 25 4
gpt4 key购买 nike

对于我的 scrapy我目前正在使用的项目 FilesPipeline .下载的文件以其 URL 的 SHA1 哈希作为文件名存储。

[(True,
{'checksum': '2b00042f7481c7b056c4b410d28f33cf',
'path': 'full/0a79c461a4062ac383dc4fade7bc09f1384a3910.jpg',
'url': 'http://www.example.com/files/product1.pdf'}),
(False,
Failure(...))]

如何使用我的自定义文件名来存储文件?

在上面的示例中,我希望文件名为“product1_0a79c461a4062ac383dc4fade7bc09f1384a3910.pdf”,因此我保持唯一性但使文件名可见。

作为起点,我探索了我项目的 pipelines.py,但没有取得太大成功。

import scrapy
from scrapy.pipelines.images import FilesPipeline
from scrapy.exceptions import DropItem

class MyFilesPipeline(FilesPipeline):

def file_path(self, request, response=None, info=None):
return request.meta.get('filename','')

def get_media_requests(self, item, info):
file_url = item['file_url']
meta = {'filename': item['name']}
yield Request(url=file_url, meta=meta)

在我的 settings.py 中包含此参数

ITEM_PIPELINES = {
#'scrapy.pipelines.files.FilesPipeline': 300
'io_spider.pipelines.MyFilesPipeline': 200
}

A similar question已被问到,但它确实以图像而不是文件为目标。

我们将不胜感激。

最佳答案

file_path 应该返回文件的路径。在您的代码中,file_path 返回 item['name'],这将是您的文件路径。请注意,默认情况下 file_path calculates SHA1 hashes .所以你的方法应该是这样的:

def file_path(self, request, response=None, info=None):
original_path = super(MyFilesPipeline, self).file_path(request, response=None, info=None)
sha1_and_extension = original_path.split('/')[1] # delete 'full/' from the path
return request.meta.get('filename','') + "_" + sha1_and_extension

关于python - Scrapy文件下载如何使用自定义文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com