scrapy ImagesPipeline根据关键字下载百度图片到本地


scrapy框架

scrapy框架是一个多线程爬虫框架,是可以集请求、解析、存储于一体的爬虫框架,关于框架简介和重要的组件可以参考:
零基础scrapy项目结构简介-python批量获取百度图片到本地
下面主要以百度图片下载并保存到本地为例,介绍scrapy爬取图片到本地的方法


一、scrapy的图片下载-ImagesPipeline

ImagesPipeline是scrapy提供的图片下载类。我们可以定义pipeline来继承ImagesPipeline来实现自定义的图片下载

在scrapy的源码中(源码地址:https://github.com/scrapy/scrapy/tree/master/scrapy),pipelines文件夹下有三个python文件:files.pyimages.pymedia.py。当我们选择使用ImagesPipeline来处理图片时,主要用到了这三个python所定义的方法
scrapy源码pipelines目录

有关图片请求和保存到本地的方法可以参见这三个python,其中images.py中的一些方法是我们可以重写的(此外还有一个小知识点,ImagesPipeline其实继承了FilesPipeline,具体可参考images.py,细节将在下一篇文章中进行介绍

二、根据关键字下载百度图片到本地

1.构造百度图片请求,解析图片URL

初始化定义spider的name和allowed_domains以及关键字

image_spider.py

import scrapy
import json
from baidu_crawler.items import BaiduCrawlerItem


class ImageSpiderSpider(scrapy.Spider):
    name = 'image_spider'
    allowed_domains = ['image.baidu.com']
    key = r'猫'

构造初始请求获取到百度提供的图片总数,为之后翻页查询做准备。这里Request有三个参数,url是要获取的图片链接,callback是请求后的回调函数,即在parse方法里可以对请求结果进行解析,dont_filter=False表示对url进行去重。关于Request函数的参数和详细定义可以参照
https://github.com/scrapy/scrapy/blob/be655b855da3f5643b004e9f2d5b9161266c17f4/scrapy/http/request/init.py

image_spider.py

def start_requests(self):
    url = 'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&queryWord={word}&word={word}&pn=0'.format(word=self.key)
    yield scrapy.Request(url=url, callback=self.parse, dont_filter=False)

然后解析请求返回的结果,获取到图片总数,根据图片数来翻页请求所有可以获得的图片

image_spider.py

def parse(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值