关于用Python的Scrapy框架开发爬虫时如何保存图片的咨询
用 Scrapy 框架开发爬虫,按照一般的规范,对图片进行下载并保存的操作是不是应当放在 pipelines.py 中实现呢?
谢谢
关于用Python的Scrapy框架开发爬虫时如何保存图片的咨询
7 回复
是的
在Scrapy里存图片,直接用内置的ImagesPipeline最省事。先在settings.py里配好:
ITEM_PIPELINES = {
'scrapy.pipelines.images.ImagesPipeline': 1,
}
IMAGES_STORE = './images' # 存图片的目录
然后在items.py定义你的item,确保有个image_urls字段:
import scrapy
class MyItem(scrapy.Item):
image_urls = scrapy.Field()
images = scrapy.Field()
最后在spider里把图片链接塞进item就行:
import scrapy
from myproject.items import MyItem
class MySpider(scrapy.Spider):
name = 'img_spider'
def parse(self, response):
item = MyItem()
# 假设图片链接在img标签的src属性里
item['image_urls'] = response.css('img::attr(src)').getall()
yield item
跑起来后图片会自动下载到./images/full/目录下,文件名是图片URL的SHA1哈希值。如果想自定义文件名或加些处理,可以继承ImagesPipeline重写file_path方法:
from scrapy.pipelines.images import ImagesPipeline
class MyImagesPipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None, *, item=None):
# 用item里的name字段当文件名
return f"{item['name']}.jpg"
记得在settings里把默认的pipeline换成你这个自定义的。
总结:用ImagesPipeline最方便。
谢谢!
爬虫下载图片的做法,是不是最好用的还是 urllib 模块和以下的步骤?
req=urllib.request.Request(imageURL)
response=urllib.request.urlopen(req)
data=response.read()
谢谢,我去学习学习
请教,这个例子中的 get_media_requests(self,item,info)方法,info 参数是怎么个用法呢?谢谢
没什么用, 兼容旧版本的

