python - scrapy管道中的结构化图像下载

标签 python scrapy pipeline directory-structure imagedownload

编辑:
这不是旧版本 scrapy 的重复。 Scrapy 最近几年发生了变化,当前版本是 0.24

Scrapy 在过去几年的发展中取得了巨大的发展。大多数关于 scrapy 的 stackoverflow 答案都已经过时了。

我正在使用 scrapy 0.24.4 并希望以单独的方式为每个链接下载图像。现在,使用 scrapy 文档,我可以下载图像,但它们仅驻留在一个文件夹中。

我正在使用下面的代码,因此它会根据每个网址保存在单独的文件夹中,但无法实现。该代码甚至不运行,它驻留在 pipelines.py 中。仅执行图像管道的默认行为,即下载 item['image_urls'] 中的每个 url。

管道.py

import scrapy
from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
import urlparse 
import urllib

class RecursiveScrapPipeline(object):

    """Custom Image to save in Structured folder """

    def process_item(self, item, spider):
        #item currently is image name
        image_guid =  item

        return "%s/full/%s.jpg"% (id,image_guid)
    #this should work , exactly as per documentation 



    def get_media_requests(self, item, info):

        for image_url in item['image_urls']:
            yield scrapy.Request(image_url,meta={'id':item['Property_name']})

我走的路正确吗?可能的解决方案是什么?

最佳答案

我实际上不确定你想在这个管道中做什么,但有些事情似乎非常错误。我可能完全误解了您想要做什么,因此在这种情况下,请详细说明您的实现细节。

与此同时,以下是一些可能存在问题的事情:

  1. 如果您的目标是更改此管道的默认行为,您应该从 ImagesPipeline 继承。您还应该确保在 settings.py 中启用您的管道。

  2. 方法 process_item() 应该返回 Item() 对象或引发 DropItem() 异常,但您返回的是字符串?更糟糕的是,它是通过将项目对象隐式转换为字符串而创建的字符串?在这种情况下,这是没有意义的。如果您认为不应该重写 ImagesPipeline 中的该方法,则更少。

  3. 您没有实现 if item_completed(),这是当单个项目的所有图像请求完成(完成下载或由于某种原因失败)时调用的方法。从那里,您也可以看到图像下载的路径,并在必要时移动它。

请阅读Downloading Item images的官方文档有关进一步说明的官方文档。

关于python - scrapy管道中的结构化图像下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478958/

相关文章:

python - 如何在 Python 中进行实时 3D 绘图

python - OpenERP/Odoo 意外 View 解析错误

python - ValueError : Invalid\escape: error while doing json. 加载()

python - Scrapy 处理 cookies/session/proxies

c# - 使用管道中的数据

Python:如何使用 Apache Beam 连接到 Snowflake?

json - ElasticSearch - JSON 处理器输出单个字段名称,省略其余部分

python - 快速 PDF 分割器库

python - 从脚本抓取抓取总是在抓取后阻止脚本执行

python - 正确使用类(csv 阅读器示例)