在Scrapy中,将下载文件嵌套在已生成项目dict的to下方

时间:2019-02-21 08:46:54

标签: scrapy

要在Scrapy中下载文件,可以将键“ fileurls”添加到产生的项目dict中,并带有要下载的url值。但是我的文件被嵌套在dict的最高层以下。一个项目看起来像这样:

{
  "title": "foo",
  "files": {
    "drawings": [
      {
        "caption": "bar",
        "fileurl": "http://foo.com/foo/foo.pdf"
      },
      {
        "caption": "second floor",
        "fileurl": "http://foo.com/foo/bar.pdf"
      }
    ],
    "photos": [
      {
        "caption": "bar",
        "fileurl": "http://foo.com/foo/baz.pdf"
      }
    ]
  }
}

理想情况下,我希望下载每个文件,并在“ fileurl”旁边抓取添加其“ file”元素。但这似乎并不自动。

我该如何实现? Scrapy的当前版本是1.6.0。

1 个答案:

答案 0 :(得分:1)

要执行类似的操作,您需要创建自己的scrapy的FilesPipeline子类。

要进行下载,您需要一个自定义的get_media_requests方法,该方法应从您的商品中获取URL并返回可迭代的请求,这些请求将用于下载文件。

之后,您还需要修改item_completed和/或file_downloaded方法,以所需的精确方式存储结果。

如果您需要比文档中提供的更多详细信息,请查看the source并了解现有管道的工作原理。