Ale*_*sen 4 python scrapy scraper scrapy-spider
以下:scrapy的教程我做了一个简单的图像爬虫(刮掉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"
Run Code Online (Sandbox Code Playgroud)
items.py
import scrapy
class ImageItem(scrapy.Item):
file_urls = scrapy.Field()
files = scrapy.Field()
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
Gra*_*rus 11
您的蜘蛛返回的项目必须包含"file_urls"文件和/或"image_urls"图像的字段.在您的代码中,您可以指定Image管道的设置,但是您的返回网址是"file_urls".
只需更改此行:
yield ImageItem(file_urls=[img_url])
# to
yield {'image_urls': [img_url]}
Run Code Online (Sandbox Code Playgroud)
*scrapy可以返回字典对象而不是项目,这样可以在只有一个或两个字段时节省时间.
花了几个小时研究为什么内置 ImagePipeline 在我的本地不起作用。最后,我从文档中找到了这个
The Images Pipeline requires Pillow 4.0.0 or greater. It is used for thumbnailing and normalizing images to JPEG/RGB format.
Run Code Online (Sandbox Code Playgroud)
安装好枕头后。它工作正常。
| 归档时间: |
|
| 查看次数: |
4914 次 |
| 最近记录: |