python - 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)
我阅读了一些关于这个问题的在线帖子并尝试了提到的内容。
- 我卸载了 Pillow 和 PIL,然后重新安装了 Pillow。同样的错误。
- 我通读了https://pillow.readthedocs.io/en/5.1.x/installation.html#warnings并认为我可以进入 PIL\Image.py 并更改
from . import _imaging as core
为from 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 执行各种其他任务(不是图像下载)并且没有遇到任何问题。
解决方案
解决方案:
我启动了一个虚拟环境并在该环境中安装了 Scrapy 和 Pillow,它运行完美!
#after setting up virtualenv and activating venv...
(venv) $ pip3 install Scrapy
(venv) $ pip3 install Pillow
我的蜘蛛需要大量工作,但错误已修复!希望这可以帮助某人。虚拟环境绝对是所有 Python 项目的必经之路。
对于像我这样的其他新手来说,虚拟环境解决了很多奇怪的错误,因为很多时候你会从更早的日期安装现在已经过时并且与更新的相关包不兼容的包(但错误代码并不总是告诉你那)。因此,设置 virtualenv 并从头开始应该是您在调试时首先要做的事情之一。否则总是从使用虚拟环境开始。:)
推荐阅读
- c# - 允许用户灵活查询数据库但防止 SQL 注入
- docker - golang 应用程序的 Docker 临时图像找不到二进制“没有这样的文件或目录”
- android - 从 Sqlite 数据酶中获取数据并在 android studio 的 recyclerview 中显示
- matlab - PDF报告生成器中格式的表格字段 - Matlab
- c++ - Qt 通过回调更新 UI 中的图像
- blueprism - 为什么我的 HTML 元素可以在 Application Modeller 中识别,但不能在运行时识别?(蓝棱镜)
- angular - 在数组 angular 9 中转换来自 api 的数据并获取最后 5 个
- python-3.x - Django 邮件未在视图中向 def 发送邮件错误
- powershell - 我想维护当前的日期文件
- reactjs - 反应 JS。this.props.children 影响最小化灯塔审计中的主线程工作参数