使用scrapy的filepipeline过程中,希望自己指定filepath所以重写了该pipeline,但发现对应的filepath函数的输入参数不包括item,请问如何在filepath内能够获取item的相关信息呢?
class LFPipeline(scrapy.pipelines.files.FilesPipeline):
def get_media_requests(self, item, info):
for file_url in item['file_urls']:
yield scrapy.Request(file_url, meta={"lessoname": item['lessonname'], "filename": item['filename']})
def item_completed(self, results, item, info):
print "COMPLETED"
file_paths = [x['path'] for ok, x in results if ok]
if not file_paths:
raise DropItem("Item contains no files")
#item['file_paths'] = file_paths
return item
def file_path(self, request, response=None, info=None):
print item["filename"]
#此处应该是在get_media_request之后,item_completed之前调用的,但就是没有item这个输入参数,应该怎么解决呢?
return "abcde"
get_media_requests函数是返回了一个request对象的,而这个request对象就是file_path函数接收的那个,你可以把item整个都放在meta中传给file_path函数就好了