【发布时间】:2018-04-12 09:15:17
【问题描述】:
对于我的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
}
已询问similar question,但它的目标是图像而不是文件。
任何帮助将不胜感激。
【问题讨论】:
标签: python scrapy scrapy-spider scrapy-pipeline