Python网络爬虫--Scrapy基础

Scrapy基础

1、Spider
  • 用途
    • 定义爬取网站的动作
    • 分析爬取下来的内容
  • 基础属性
    • name:爬虫名称。定义Spider名字的字符串,必须是唯一的
    • allowed_domains:允许爬取的域名,不在此范围的链接不会跟进爬取。可选配置
    • start_urls:起始Url列表。在没有实现start_requests()方法时,默认从这个列表中爬取
    • custom_settings:全局字典。此设置会覆盖项目全局的设置
    • crawler:由from_crawler()方法设置,代表本Spider类对应的Crawler对象。Crawler对象包含了很多项目组件,可以获取项目的一些配置信息
    • settings:Settings对象。可以直接获取项目的全局设置变量
  • 常用方法
    • start_requests():用于生成初始请求,必须返回一个可迭代对象。GET请求方式则返回Request(),POST请求方式则返回FormRequest()
    • parse():默认的回调函数。负责处理Respone,处理返回结果,并提取想要的数据和下一步请求。该方法需要返回一个包含Request或Item的可迭代对象
    • closed():当Spider关闭时,用于释放资源或荣盛石化了收尾操作
2、Downloader Middleware
  • 用途

    • 在Scheduler调度出队列的Request发送给Downloader下载之前,即Request执行下载之前,对其进行修改
    • 在下载后生成的Response发送给Spider之前,即Spider解析Response之间,对其进行修改
  • 设置

    • 禁用DOWNLOADER_MIDDLEWARES_BASE中的Downloader Middleware
    • 添加字典DOWNLOADER_MIDDLEWARES,并在其中添加自己定义的Downloader Middleware
  • 核心方法

    • process_request(request, spider)

      参数

      • request:Request对象,即被处理的Request
      • spider:Spider对象,即此Request对应的Spider

      返回类型

      • 返回None

        Scrapy将继续处理该Request,接着执行其他Downloader Middleware的process_request()方法,直到Downloader把Request执行后得到Response才结束

      • 返回Response对象

        执行每个Downloader Middleware的process_response()方法,并将Response对象发送给Spider处理

      • 返回Requests对象

        重新将Request对象放入调度队列中,等待被调度

      • 抛出IgnoreRequest异常

        所有的Downloader Middleware的process_exception()方法

    • process_response(request, response, spider)

      参数

      • request:Request对象,即Response对应的Request
      • response:Response对象,即此被处理的Response
      • spider:Spider对象,即此Response对应的Spider

      返回类型

      • 返回Request对象

        重新将Request对象放入调度队列中,等待被调度

      • 返回Response对象

        更低优先级的Downloader Middleware的process_response()方法会继续调用,继续对该Response对象进行处理

      • 抛出异常

        Request的errorback()方法会回调

    • process_exception(request, exception, spider)

      参数

      • request:Request对象,即Response对应的Request
      • exception:抛出的异常
      • spider:Spider对象,即此Response对应的Spider

      返回类型

      • None

        便低优先级的Downloader Middleware的process_exception()会被继续顺次调用,直到所有方法全部调用完毕

      • Response

        每个Downloader Middleware的process_response()方法被依次调用

      • Request

        重新将Request对象放入调度队列中,等待被调度

3、Spider Middleware(不太常用)
  • 用途

    • 在Response发送给Spider之前,对Response进行处理
    • 在Request发送给Scheduler之前,对Request进行处理
    • Spider生成的Item发送给Item Pipeline之前,对Item进行处理
  • 核心方法

    • process_spider_input(response, spider)

      当Response被Spider Middleware处理进,调用此方法

    • process_spider_output(response, result, spider)

      当Spider处理Response返回结果时,调用此方法

    • process_spider_exception(response, exception, spider)

      当Spider或Spider Middleware的process_spider_input()方法抛出异常时,调用些方法

    • process_start_request(start_requests, spider)

      此方法以Spider启动的Request为参数被调用,执行过程类似于process_spider_output()方法,必须返回Request

4、Item Pipeline
  • 用途

    • 清理HTML数据
    • 验证爬取数据,检查爬取字段
    • 查重并丢弃重复内容
    • 将爬取结果保存到数据库
  • 核心方法

    • process_item(item, spider)[必须实现]

      参数

      • item
      • spider

      返回参数

      • Item对象

        此Item会被低优先级的Item Pipeline的process_item()方法处理,直到所有方法调用完毕

      • DropItem异常

        此Item被丢弃,不再进行处理

    • open_spider(spider)

      在Spider开启时自动调用。可以进行初始化操作,比如数据库连接等

    • close_spider(spider)

      在Spider关闭时自动调用。可以进行收尾工作,比如关闭数据库连接等

    • from_crawler(cls, crawler)

      此方法是一个类方法,使用@classmethod标识,是一种依赖注入方式。

      参数

      • cls:就是Class,最后返回一个Class实例
      • crawler:通过crawler可以拿到Scrapy的所有核心组件,例如全局配置
  • Image Pipeline

    Scrapy提供了专门处理下载的Pipeline,包括文件下载和图片下载。

    头文件

    from scrapy.pipelines.images import ImagesPipeline
    

    方法

    • get_media_requests()

      将url字段取出来,生成Request对象,加入到调度队列,执行下载

    • file_path()

      返回保存的文件名

    • item_completed()

      此方法是当个Item完成下载时的处理方法。由于会下载失败,所以需要分析下载结果并剔除下载失败的图片

    配置

    ITEM_PIPELINES = {
    	"项目名.pipelines.下载类名": 300,
    	"项目名.pipelines.保存类名": 301
    }
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值