• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python网络爬虫--Scrapy基础

武飞扬头像
碎梦轻尘
帮助1

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
    }
    

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfibee
系列文章
更多 icon
同类精品
更多 icon
继续加载