以下:scrapy's教程我制作了一个简单的图像抓取工具(刮掉了Bugattis的图像)。以下示例中说明了这一点。
然而,按照指南给我留下了一个无法正常运行的爬虫!它找到所有网址,但不下载图片。
我找到了一个鸭子胶带解决方案:替换ITEM_PIPELINES
和IMAGES_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])
答案 0 :(得分:7)
您的蜘蛛返回的项目必须包含文件的字段"file_urls"
和/或图片的"image_urls"
。在您的代码中,您可以指定图片管道的设置,但在"file_urls"
中指定返回网址。
只需更改此行:
yield ImageItem(file_urls=[img_url])
# to
yield {'image_urls': [img_url]}
* scrapy可以返回字典对象而不是项目,这样可以节省您只有一个或两个字段的时间。
答案 1 :(得分:0)
花了几个小时调查为什么内置的 ImagePipeline 在我的本地不起作用。 最后,我从文档中找到了这个
The Images Pipeline requires Pillow 4.0.0 or greater. It is used for thumbnailing and normalizing images to JPEG/RGB format.
安装 Pillow 后。运行正常。