zoukankan      html  css  js  c++  java
  • 【python】【scrapy】使用方法概要(二)

    【请初学者作为参考,不建议高手看这个浪费时间】

    上一篇文章里介绍了scrapy的主要优点及linux下的安装方式,此篇文章将简要介绍scrapy的爬取过程,本文大部分内容源于scrapy文档,翻译并加上了笔者自己的理解。

    忘记scrapy,一般所说的爬虫工作分为两个部分,downoader 和 parser:

    downloader输入是url列表,输出抓取到的rawdata,可能时候是html源代码,也可能是json,xml格式的数据。

    parser输入是第一部分输出的rawdata,根据已知的规则提取所需的info

    image

    图1. 简单爬虫

    图1所示的是最简单的爬虫,不考虑解析url,并把rawdata中的url提取做进一步提取,并假设预先知道抓取的所有的url,而且抓到的网页的parser(提取规则)是相同的。

    ---------------------------------------------------------------------------------------------------------------------------

    重新回到主角scrapy

    下面是摘取的scrapy文档中的抓取流程图

    image

    官方文档中对图中的每个components如下:

    scrapy engine 【scrapy引擎】

    引擎控制系统中的数据流,当某些情况发生时,触发事件。

    scheduler 【调度器】

    调度器接受引擎发送过来的request对象【可简单理解成抓取任务】并把他们入队列,等待的引擎在适当时刻提取出这些request并把它们通过下载中间件交给downloader去做下载。

    Downloader【下载器】

    Downloader根据request对象中的地址获取网页内容告知引擎下载结果,并把网页内容传送给spider组件

    Spiders【解析器】

    Spiders是开发人员主要接触的组件,开发人员通过在这里coding,从raw网页中提取出所需的数据并存入item【数据原单元,一个item代表一项数据对象,使用者自己定义item包含的数据项】或者提取出新的抓取request对象【新的抓取任务】 一个爬虫负责一个指定domain列表下的网页

    ItemPipeline【item管道】

    item管道负责处理爬虫吐出的item,包括数据清理,验证,保存

    DownloaderMiddleware【下载中间件】

    【工作原理很像一般mvc框架中的拦截器或者behavior,开发者可以在某些步骤之间插入自己的处理逻辑】有了中间件,开发这可以在engine向downloader传request任务之间,或者,在downloader下载完毕,向engine吐回response对象的时候对request,或者resonse插入custom code

    Spider milldleware【解析器中间件】

    spider middleware是引擎和spider之间的hook程序【拦截器】,用来处理spider的输入【response】和输出【item and requests】

    【这两类中间件为开发者提供了非常便利的扩展scrapy的方式】

    image

    scrapy的数据流有engine【类似于mvc框架中的controller】指挥,如下:

    1. engine打开一个domain,定位spider代码的位置,获取最初的urls【start_urls,暂叫‘种子’】,拿到Request对象

    2. 拿到这些最初的Request对象,并把他们交给scheduler,enqueue到scheduler负责的任务队列中

    3. engine向scheduler索取下一个要下载的request【url】

    4. scheduler收到请求后,从任务队列中pop出一个request,并feed给engine,engine收到后,将抓取任务发送给downloader,这些request将通过downloader middlewares【scrapy默认会开启很多内置的downloader】

    5. 当downloader下载完毕后,downloader生成一个Response对象并通过downloader middlerware传递给engine

    6. engine拿到reponse后,通过spidermiddleware将response交给spider做解析工作

    7. spider解析response,将解析出来的item和新的Request【新的抓取任务】交给engine

    8. engine将拿到的item交给pipeline处理,将新的Request按照第2步骤发送给scheduler

    9. 程序会在2-8之间循环直至scheduler中的任务队列为空

    喜欢一起简单,实用的东西,拒绝复杂花哨,我不是GEEK.
  • 相关阅读:
    二分查找思路以及可能出现情况对应解决办法
    多线程知识点大纲
    服务器consul启动方法
    大白话带你认识 ZooKeeper !重要概念一网打尽!
    「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!
    从 BIO、NIO 聊到 Netty,最后还要实现个 RPC 框架!
    什么是P问题、NP问题和NPC问题
    期刊汇总
    Typora 使用
    TCA 复习
  • 原文地址:https://www.cnblogs.com/igloo1986/p/2646368.html
Copyright © 2011-2022 走看看