내 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이 요청하지만 대상 이미지가 아닌 파일을 수행하고있다.
도움이 될 것입니다.
감사합니다, 이것은 내가 기대했던 도움이됩니다 - 내 문맥에서 코드에 작은 문제가 하나있다. 마지막으로 문자열과 목록을 연결하면 목록의 첫 번째 항목을 명시 적으로 선택해야한다. return request.meta.get ('filename', '') [0] + "_"+ sha1_and_extension' – Michael