私の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
を出発点として、多くの成功を収めました。私settings.py
ITEM_PIPELINES = {
#'scrapy.pipelines.files.FilesPipeline': 300
'io_spider.pipelines.MyFilesPipeline': 200
}
でこのパラメータを含めると
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)
はsimilar questionが求められてきたが、それは、対象画像ではなくファイルを行います。
ご協力いただければ幸いです。
おかげで、これは私が期待していたヘルプです - 私の文脈であなたのコードにちょっとした問題がありました。最後の例はリストを文字列に連結して、リストの最初の項目を明示的に選択しなければならなかった 'return request.meta.get( 'filename'、 '')[0] + "_" + sha1_and_extension' – Michael