基本操作:python—scrapy数据解析、存储_郑*杰的博客-优快云博客
步骤:
a.在爬虫文件抓取图片地址后返回给itmes对象
b.在管道文件重写三个父类的方法来完成图片二进制数据的请求和持久化存储
c.setting.py文件添加指定图片存放的目录:IMAGES_STORE = '指定目录路径'
当前文件:D:\python_test\scrapyProject\scrapyProject\spiders\first.py
import scrapy
from ..items import ScrapyprojectItem
class FirstSpider(scrapy.Spider):
name = 'first'
start_urls = ['https://pic.netbian.com/4kmeinv/']
def parse(self, response):
list_ul = response.xpath('//div[@class = "slist"]/ul/li')
for li in list_ul:
img_url = li.xpath('.//img/@src').extract_first()
img_url="https://pic.netbian.com/"+img_url
items = ScrapyprojectItem()
items['img_url'] = img_url
yield items
当前文件:D:\python_test\scrapyProject\scrapyProject\pipelines.py
import scrapy
from itemadapter import ItemAdapter
from scrapy.pipelines.images import ImagesPipeline # pip install Pillow
#自定义的管道类要继承与ImagesPipeline,所有多媒体都用这个类
class mediaPileline(ImagesPipeline):
#重写三个父类的方法完成图片二进制数据的请求和持久化存储
#可以根据图片地址,对其进行请求,获取图片数据
def get_media_requests(self, item, info):
img_src = item['img_url']
yield scrapy.Request(img_src)
# yield scrapy.Request(img_src,meta={'item':item}) 可将item传给file_path
#指定图片的名称(只需要返回图片存储的名称即可)
def file_path(self, request, response=None, info=None, *, item=None):
# meta = request.meta
imgName = request.url.split('/')[-1]
print(imgName,'下载保存成功!')
return imgName
def item_completed(self, results, item, info):
return item #可以将当前的管道类接收到item对象传递给下一个管道类