使用scrapy ImagesPipeline爬取图片资源

  介绍

这篇文章运用简单易懂的例子给大家介绍使用scrapy ImagesPipeline爬取图片资源,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

这是一个使用scrapy的ImagesPipeline爬取下载图片的示例,生成的图片保存在爬虫的完整的文件夹里。

scrapy startproject DoubanImgs cd DoubanImgs

scrapy genspider download_douban douban.com

vim蜘蛛/download_douban。py

 #=utf - 8编码
  从scrapy。蜘蛛进口蜘蛛
  进口再保险
  从scrapy导入请求
  从. .项目导入DoubanImgsItem
  
  
  类download_douban(蜘蛛):
  name=& # 39; download_douban& # 39;
  
  default_headers={
  & # 39;接受# 39;:& # 39;text/html, application/xhtml + xml应用程序/xml; q=0.9,图像/webp */*; q=0.8 & # 39;
  & # 39;Accept-Encoding& # 39;: & # 39; gzip、缩小,sdch、br # 39;
  & # 39;接收语言# 39;:& # 39;应用,zh型;q=0.8, en; q=0.6 & # 39;
  & # 39;cache - control # 39;: & # 39;信息=0 & # 39;
  & # 39;连接# 39;:& # 39;保活# 39;
  & # 39;主机# 39;:& # 39;www.douban.com& # 39;
  & # 39;用户代理# 39;:& # 39;Mozilla/5.0(麦金塔电脑;Intel Mac OS X 10 _11_4) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/52.0.2743.116 Safari 537.36 & # 39;,
  }
  
  def __init__(自我、url=& # 39; 1638835355 & # 39;, * args, * * kwargs):
  自我。allowed_domains=[& # 39; douban.com& # 39;】
  自我。start_urls=[]
  因为我在xrange (23):
  如果我==0:
  page_url=& # 39; http://www.douban.com/photos/album/& # 39;+网址
  其他:
  page_url=& # 39; http://www.douban.com/photos/album/& # 39;+ + & # 39;url/, # 63;开始=& # 39;+ str(我* 18)
  self.start_urls.append (page_url)
  自我。url=url
  #父亲基函数的调用
  
  #超级(download_douban,自我)。__init__ (* args, * * kwargs)
  
  def start_requests(自我):
  
  在self.start_urls url:
  收益率请求(url=url,标题=self.default_headers调=self.parse)
  
  def解析(自我,反应):
  list_imgs=response.xpath (& # 39;//div [@class=皃hotolst clearfix"]//img/@src& # 39;) .extract ()
  如果list_imgs:
  项=DoubanImgsItem ()
  项目(& # 39;image_urls& # 39;]=list_imgs
  收益项

vim设置。py

 # - * -编码:utf - 8 - *
  
  # DoubanImgs Scrapy设置项目
  #
  #为简单起见,这个文件包含> # - * -编码:utf - 8 - *
  
  #定义这里刮的模型项
  #
  #看文档:
  # https://doc.scrapy.org/en/latest/topics/items.html
  进口scrapy
  从scrapy导入字段
  
  
  类DoubanImgsItem (scrapy.Item):
  #这里定义的字段项:
  # name=scrapy.Field ()
  image_urls=字段()
  图像=字段()
  image_paths=字段()

vim管道。py

 # - * -编码:utf - 8 - *
  
  #定义项目管道
  #
  #不要# 39;t忘记添加你的管道ITEM_PIPELINES设置
  #见:http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  从scrapy.pipelines。图片导入ImagesPipeline
  从scrapy。异常进口DropItem
  从scrapy导入请求
  从scrapy导入日志
  
  
  类DoubanImgsPipeline(对象):
  def process_item(自我,物品,蜘蛛):
  返回项目
  
  
  类DoubanImgDownloadPipeline (ImagesPipeline):
  default_headers={
  & # 39;接受# 39;:& # 39;图像/webp图像/* */*;q=0.8 & # 39;
  & # 39;accept-encoding& # 39;: & # 39; gzip、缩小,sdch、br # 39;
  & # 39;接收语言# 39;:& # 39;应用,zh型;q=0.8, en; q=0.6 & # 39;
  & # 39;饼干# 39;:& # 39;报价=yQdC/AzTaCw& # 39;
  & # 39;推荐人# 39;:& # 39;https://www.douban.com/photos/photo/2370443040/& # 39;
  & # 39;用户代理# 39;:& # 39;Mozilla/5.0(麦金塔电脑;Intel Mac OS X 10 _11_4) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/52.0.2743.116 Safari 537.36 & # 39;,
  }
  
  def get_media_requests(自我、项目信息):
  项image_url [& # 39; image_urls& # 39;):
  self.default_headers[& # 39;推荐人# 39;]=image_url
  收益率请求(image_url头=self.default_headers)
  
  def item_completed(自我,结果,项目,信息):
  image_paths=[x [& # 39; path & # 39;]为好,x结果如果好)
  如果不是image_paths:
  提高DropItem(“项目不包含images")
  项目(& # 39;image_paths& # 39;]=image_paths
  返回项目

关于使用scrapy ImagesPipeline爬取图片资源就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

使用scrapy ImagesPipeline爬取图片资源