scrapy中filepath函数内如何获取item内容

新手上路,请多包涵

使用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"
阅读 5.4k
2 个回答

get_media_requests函数是返回了一个request对象的,而这个request对象就是file_path函数接收的那个,你可以把item整个都放在meta中传给file_path函数就好了

虽然过去一年了,但是确实解决了我的问题,鉴于这是我找到的唯一一条信息所以我补充一下,在get_media_requests中通过
yield scrapy.Request(item['url'], headers=headers,meta={'item':item})插入item,
在file_path中通过request.meta['item']['key']获取所需要的数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题