Scrapy:Images Pipeline,下载图片

Scrapy: Images Pipeline, download images

以下: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])

您的蜘蛛 returns 的项目必须包含 "file_urls" 文件字段 and/or "image_urls" 图片字段。在您的代码中,您指定了图像管道的设置,但在 "file_urls".

中指定了 return 网址

只需更改此行:

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

* scrapy 可以 return 字典对象而不是项目,当你只有一个或两个字段时可以节省时间。

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

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

安装 Pillow 后。正常工作。