zoukankan      html  css  js  c++  java
  • Scrapy001-框架初窥

    Scrapy001-框架初窥

    @(Spider)[POSTS]

    1.Scrapy简介

    Scrapy是一个应用于抓取、提取、处理、存储等网站数据的框架(类似Django)。

    应用:

    • 数据挖掘
    • 信息处理
    • 存储历史数据
    • 监测
    • 自动化测试
    • 。。。

    还有很多,详细参考:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html

    2.Scrapy架构

    Scrapy使用了Twisted异步网络库来处理网络通讯。结构如下:

    ![Scrapy](./Scrapy Architecture.png)

    Scrapy的核心组件:

    • 引擎(Scrapy Engine
      用来处理整个系统的数据流,触发事务(框架核心),负责控制和调度各个组件

    • 调度器(Scheduler
      用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回,如:要抓取的链接(URL)的优先队列,由它来决定下一个要抓取的URL是什么,并进行去重。

    • 下载器(Downloader
      用于下载网页内容,并将网页内容返回给Spiders(自己编写的虫子)--下载器建立在Twisted模型上

    • 爬虫(Spider
      干活的虫子,从特定的网页中提取自己需要的信息,即:实体Item,用户也可以提取下级链接,继续抓取页面内容。

    • 项目管道(Pipline
      负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体(Item)、验证实体的有效性、清除垃圾信息。当页面被爬虫解析后,解析后内容将会发送到项目管理通道,经过几个特定的次序处理。

    • 下载器中间件(Downloader Middlewares
      位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎和下载器之间的请求与响应。

    • 爬虫中间件(Spider Middlewares
      介于Scrapy引擎和Spider之间的框架,处理爬虫的响应输入和请求输出。

    • 调度中间件(Scheduler Middlewares)
      介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

    从上面可以看出,Scrapy的耦合性很低,扩展性更灵活,自定义性好

    3.Scrapy执行流程

    如下图:

    此图来自大神的文章

    按照上图的序号,数据的执行流程如下:

    1. 引擎自定义爬虫中获取初始化请求(种子URL--自定义爬虫文件中的start_urls
    2. 引擎将该请求放入调度器中,同时引擎从调度器获取一个待下载的请求(二者异步执行)
    3. 调度器返回给引擎一个待下载请求
    4. 引擎将待下载请求发送给下载器,中间会经过一系列下载器中间件
    5. 待下载请求经过下载器处理之后,会生成一个响应对象(response),返回给引擎,中间会再次经过一系列下载器中间件
    6. 引擎接收到下载器返回的响应对象(response)后,将其发送给自定义爬虫,执行自定义逻辑,中间会经过一系列爬虫中间件
    7. 响应对象(response)经过内部的选择器筛选并调用回调函数处理后,完成逻辑,生成结果对象新的请求对象给引擎,再次经过一系列爬虫中间件
    8. 引擎将返回的结果对象交给结果处理器处理,将新的请求对象交给调度器
    9. 新的请求对象重复上述过程,直到没有新的请求处理

    新的请求对象:多层URL的筛选中的下一层URL

    ==> 详细组件关系,待解读完源码后继续跟上。

    4.支持特性

    上面介绍的仅仅是冰上一角,Scrapy提供了很多强大的特性是爬虫更加高效,例如:

    • HTML, XML源数据 选择及提取 的内置支持
    • 提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。
    • 通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持
    • 提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
    • 高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能。
    • 内置的中间件及扩展为下列功能提供了支持:
    1. cookies and session 处理
    2. HTTP 压缩
    3. HTTP 认证
    4. HTTP 缓存
    5. user-agent模拟
    6. robots.txt
    7. 爬取深度限制
    8. 其他
    • 针对非英语语系中不标准或者错误的编码声明, 提供了自动检测以及健壮的编码支持。
    • 支持根据模板生成爬虫。在加速爬虫创建的同时,保持在大型项目中的代码更为一致。详细内容请参阅 genspider 命令。
      针对多爬虫下性能评估、失败检测,提供了可扩展的 状态收集工具 。
    • 提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的方便
    • 提供 System service, 简化在生产环境的部署及运行
    • 内置 Web service, 使您可以监视及控制您的机器
    • 内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看并且调试爬虫
    • Logging 为您在爬取过程中捕捉错误提供了方便
    • 支持 Sitemaps 爬取
    • 具有缓存的DNS解析器
  • 相关阅读:
    android 选择图片或拍照时旋转了90度问题
    拍照选择图片(Activity底部弹出)
    Dialog 自定义使用1
    Dialog 基本使用
    秒杀主流应用的二维码扫描
    gen already exists but is not a source folder. Convert to a source folder or rename it.
    gen already exists but is not a source folder. Convert to a source folder or rename it.
    Unable to execute dex: Multiple dex files define
    xxxx is not translated in zh-rCN, zh-rTW
    Android Application 对象介绍
  • 原文地址:https://www.cnblogs.com/liu-yao/p/6166487.html
Copyright © 2011-2022 走看看