【问题标题】:Scrapy: Images Pipeline, download imagesScrapy:图像管道,下载图像
【发布时间】:2016-07-26 11:53:48
【问题描述】:

以下:scrapy's 教程我做了一个简单的图像爬虫(抓取布加迪的图像)。下面的 EXAMPLE 中对此进行了说明。

但是,按照指南操作给我留下了一个无法正常工作的爬虫!它会找到所有的 url,但不会下载图像。

我找到了一个鸭带解决方案:替换 ITEM_PIPELINESIMAGES_STORE 这样;

ITEM_PIPELINES['scrapy.pipeline.images.FilesPipeline'] = 1

IMAGES_STORE -> FILES_STORE

但我不知道为什么会这样?我想使用 scrapy 记录的 ImagePipeline。

示例

settings.py

BOT_NAME = 'imagespider'
SPIDER_MODULES = ['imagespider.spiders']
NEWSPIDER_MODULE = 'imagespider.spiders'
ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
IMAGES_STORE = "/home/user/Desktop/imagespider/output"

items.py

import scrapy

class ImageItem(scrapy.Item):
    file_urls = scrapy.Field()
    files = scrapy.Field()

imagespider.py

from imagespider.items import ImageItem
import scrapy


class ImageSpider(scrapy.Spider):
    name = "imagespider"

    start_urls = (
        "https://www.find.com/search=bugatti+veyron",
    )

    def parse(self, response):
        for elem in response.xpath("//img"):
            img_url = elem.xpath("@src").extract_first()
            yield ImageItem(file_urls=[img_url])

【问题讨论】:

  • 能否请您发布__main__ 存根?我们如何输入这些函数?
  • __main__ 将是标准的 Scrapy 代码,一个样板。它会调用这个代码的蜘蛛。我同意你的代码是不完整的,但是可以推测其他移动部件的外观。

标签: python scrapy scrapy-spider scraper


【解决方案1】:

您的蜘蛛返回的项目必须包含字段"file_urls" 用于文件和/或"image_urls" 用于图像。在您的代码中,您指定图像管道的设置,但您在 "file_urls" 中指定返回网址。

只需更改此行:

yield ImageItem(file_urls=[img_url])
# to
yield {'image_urls': [img_url]}

* scrapy 可以返回字典对象而不是项目,这在您只有一两个字段时可以节省时间。

【讨论】:

  • 谢谢!您还可以将ImageItem 更改为具有image_urlsyield ImageItem(image_urls=[img_url])
【解决方案2】:

花了几个小时调查为什么内置的 ImagePipeline 不能在我的本地工作。 最后,我从文档中找到了这个

The Images Pipeline requires Pillow 4.0.0 or greater. It is used for thumbnailing and normalizing images to JPEG/RGB format.

安装 Pillow 后。它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多