要在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。
答案 0 :(得分:1)
要执行类似的操作,您需要创建自己的scrapy的FilesPipeline
子类。
要进行下载,您需要一个自定义的get_media_requests
方法,该方法应从您的商品中获取URL并返回可迭代的请求,这些请求将用于下载文件。
之后,您还需要修改item_completed
和/或file_downloaded
方法,以所需的精确方式存储结果。
如果您需要比文档中提供的更多详细信息,请查看the source并了解现有管道的工作原理。