scrapy的大文件下载(基于一种形式的管道类实现)
- 爬虫类中将解析到的图片地址存储到item,将item提交给指定的管道
- 在管道文件中导包:
from scrapy.pipelines.images import ImagesPipeline
- 基于
ImagesPipeline
父类,自定义一个管道类- 重写管道类中的如下三个方法:
from scrapy.pipelines.images import ImagesPipeline import scrapy class ImgporPipeline(ImagesPipeline): #指定文件存储的目录(文件名) def file_path(self,request,response=None,info=None): #接受mate item = request.meta['item'] return item['img_name'] #对指定资源进行请求发送 def get_media_requests(self,item,info): #meta可以传递给file_path yield scrapy.Request(item['img_src'],meta={'item':item}) #用于返回item,将item传递给下一个即将被执行的管道类 def item_completed(self,request,item,info): return item
settings.py文件中
#指定文件存储的目录 IMAGES_STORE = './imgs'
爬虫文件
import scrapy from imgPor.items import ImgporItem class ImgSpider(scrapy.Spider): name = 'img' # allowed_domains = ['www.xxx.com'] start_urls = ['http://www.521609.com/daxuemeinv/'] def parse(self, response): li_list = response.xpath('//*[@id="content"]/div[2]/div[2]/ul/li') for li in li_list: img_src = 'http://www.521609.com' + li.xpath('./a[1]/img/@src').extract_first() img_name = li.xpath('./a[2]/b/text() | ./a[2]/text()').extract_first() + '.jpg' print(img_name) item = ImgporItem() item['img_src'] = img_src item['img_name'] = img_name yield item
- 重写管道类中的如下三个方法:
原文地址:https://www.cnblogs.com/zhufanyu/p/12020519.html
时间: 2024-11-01 13:47:30