首页 > 解决方案 > Scrapy 的“ImagesPipeline”抛出各种 PIL ImportErrors

问题描述

为了测试目的,我正在尝试使用 Scrapy 下载图像,并且我整天都在努力找出这个错误。

在进一步解释之前,这是我要参考的代码:

[主刮板文件,'sample.py']:

import scrapy
from ..items import MyspiderItem

url= 'http://example.webscraping.com/places/static/images/flags/af.png'
class SampleSpider(scrapy.Spider):
    name = 'sample'
    start_urls = [url]

    def parse(self, response):
        item = MyspiderItem()
        item['image_urls'] = url
        return item

[设置.py]:

BOT_NAME = 'mySpider'
SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'
ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = 'E:/Chris/img'

[项目.py]:

import scrapy

class MyspiderItem(scrapy.Item):
    images = scrapy.Field()
    image_urls = scrapy.Field()

[所有其他文件保留为默认值]

首先,在第一次运行后,我收到了错误消息:

(...)
  File "c:\users\chris\appdata\local\programs\python\python38-32\lib\site-packages\PIL\Image.py", line 93, in <module>
    from . import _imaging as core
ImportError: cannot import name '_imaging' from 'PIL' (c:\users\chris\appdata\local\programs\python\python38-32\lib\site-packages\PIL\__init__.py)

我阅读了一些关于这个问题的在线帖子并尝试了提到的内容。

  1. 我卸载了 Pillow 和 PIL,然后重新安装了 Pillow。同样的错误。
  2. 我通读了https://pillow.readthedocs.io/en/5.1.x/installation.html#warnings并认为我可以进入 PIL\Image.py 并更改from . import _imaging as corefrom PIL.Image import core as _imaging(也将所有“核心”更改为“_imaging”) . 这一次,仍然是一个错误,但是一个新的:
(...)
  File "c:\users\chris\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\pipelines\images.py", line 10, in <module>
    from PIL import Image
  File "c:\users\chris\appdata\local\programs\python\python38-32\lib\site-packages\PIL\Image.py", line 93, in <module>
    from PIL.Image import core as _imaging
ImportError: cannot import name 'core' from partially initialized module 'PIL.Image' (most likely due to a circular import) (c:\users\chris\appdata\local\programs\python\python38-32\lib\site-packages\PIL\Image.py)

在这一点上,即使经过所有其他类似的 stackoverflow/github 问题,我似乎也无法修复此错误。任何帮助,将不胜感激。我感觉它要么与 vscode 路径相关,要么 Scrapy 可能不适用于最新的 Pillow/PIL 库。顺便说一句,我没有使用虚拟环境。也许我应该?值得注意的是,我最近一直在使用 Scrapy 执行各种其他任务(不是图像下载)并且没有遇到任何问题。

标签: pythonscrapypython-imaging-libraryimporterrorimagedownload

解决方案


解决方案:

我启动了一个虚拟环境并在该环境中安装了 Scrapy 和 Pillow,它运行完美!

#after setting up virtualenv and activating venv...

(venv) $ pip3 install Scrapy
(venv) $ pip3 install Pillow

我的蜘蛛需要大量工作,但错误已修复!希望这可以帮助某人。虚拟环境绝对是所有 Python 项目的必经之路。

对于像我这样的其他新手来说,虚拟环境解决了很多奇怪的错误,因为很多时候你会从更早的日期安装现在已经过时并且与更新的相关包不兼容的包(但错误代码并不总是告诉你那)。因此,设置 virtualenv 并从头开始应该是您在调试时首先要做的事情之一。否则总是从使用虚拟环境开始。:)


推荐阅读