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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。