Это дополнительный вопрос к моему начальному вопросу .Я хочу скачать PDF-файлы и сохранить их на жестком диске с пользовательским именем файла.
Для пользовательского имени файла я попробовал этот код в своем pipelines.py
в соответствии с этой рекомендацией :
class PrangerPipeline(object):
def process_item(self, item, spider):
return item
def file_path(self, request, response=None, info=None):
original_path = super(PrangerPipeline, 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
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 = {
'pranger.pipelines.PrangerPipeline': 1,
'scrapy.pipelines.files.FilesPipeline': 2,
}
Но файлы сохраняются только с их SHA1-хешем, например: a8569143c987cdd43dd1f6d9a6f98b7aa6fbc284.PDF.Так что моя пользовательская функция file_path
, похоже, не используется Scrapy.
Когда я закомментирую строку
'scrapy.pipelines.files.FilesPipeline': 2,
, ничего не будет загружено.
Я запутался...