Python Scrapy图片爬取原理及代码实例
1.在爬虫文件中只需要解析提取出图片地址,然后将地址提交给管道
在管道文件对图片进行下载和持久化存储
classImgSpider(scrapy.Spider): name='img' #allowed_domains=['www.xxx.com'] start_urls=['http://www.521609.com/daxuemeinv/'] url='http://www.521609.com/daxuemeinv/list8%d.html' pageNum=1 defparse(self,response): li_list=response.xpath('//*[@id="content"]/div[2]/div[2]/ul/li') forliinli_list: img_src='http://www.521609.com'+li.xpath('./a[1]/img/@src').extract_first() item=ImgproItem() item['src']=img_src yielditem
2.配置文件修改
配置文件要增加IMAGES_STORE='./imgsLib'表明图片存放的路径
3.管道类的修改
原本管道类继承的object,处理item对象使用时process_item方法,该方法不能发送请求,要想对图片地址发送请求,需要继承ImagesPipeline类,然后重写该类中的三个方法:get_media_requests,file_path,item_completed
fromscrapy.pipelines.imagesimportImagesPipeline importscrapy classImgproPipeline(ImagesPipeline): #对某一个媒体资源进行请求发送 #item就是接收到的spider提交过来的item defget_media_requests(self,item,info): yieldscrapy.Request(item['src']) #制定媒体数据存储的名称 deffile_path(self,request,response=None,info=None): name=request.url.split('/')[-1] print('正在下载:',name) returnname #将item传递给下一个即将给执行的管道类 defitem_completed(self,results,item,info): returnitem
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。