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 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解析器

Scrapy001-框架初窥的更多相关文章

  1. APP界面框架初窥---标签导航

    标签导航是十大界面框架设计里最常用的界面框架设计,也是被业界之内公认的一种普遍使用的页面框架设计.那么这种页面框架设计在作业方面对一个用户来说也是最常见的一种页面框架设计,比如说微博.微信.手机百度. ...

  2. scrapy2_初窥Scrapy

    递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...

  3. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  4. 网页3D效果库Three.js初窥

    网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...

  5. iOS视频直播初窥:高仿<喵播APP>

    视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...

  6. 初窥Flask

    初窥Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求 ...

  7. Scrapy 1.4 文档 01 初窥 Scrapy

    初窥 Scrapy Scrapy 是用于抓取网站并提取结构化数据的应用程序框架,其应用非常广泛,如数据挖掘,信息处理或历史存档. 尽管 Scrapy 最初设计用于网络数据采集(web scraping ...

  8. python爬虫 scrapy2_初窥Scrapy

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  9. 初窥Kaggle竞赛

    初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...

随机推荐

  1. em(倍)与px的区别

    在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...

  2. SQL Server 常用关键字

    SQL 建库 建表 --1.创建一个数据库 create database School; --删除数据库 drop database School; --创建数据库的时候指定一些选项. create ...

  3. Oracle 11g导出空表、少表的解决办法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  4. APiCloud真机调试需要注意的几个问题

    具体请看官方文档:http://docs.apicloud.com/Dev-Tools/wifi-debug. APiCloud Android手机真机调试,需要首先在手机上安装官网提供的apploa ...

  5. 动态树之LCT(link-cut tree)讲解

    动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ...

  6. iOS播放器 - AVPlayer

    之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer. 这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类. 首先我们要声明一下播放器,这里有 ...

  7. Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里

    这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...

  8. 程序代码中退出函数exit()与返回函数return ()的区别

    程序代码中退出函数exit()与返回函数return ()的区别   exit(0):正常运行程序并退出程序:   exit(1):非正常运行导致退出程序:   return():返回函数,若在主函数 ...

  9. Unity3D游戏在iOS上因为trampolines闪退的原因与解决办法

    http://7dot9.com/?p=444 http://whydoidoit.com/2012/08/20/unity-serializer-mono-and-trampolines/ 确定具体 ...

  10. html5中常见的全局属性

    1.contentEditable属性 1.功能说明 (1)功能:允许用户编辑元素中的内容 (2)说明:是一个布尔值,false是不能编辑,true为可编辑 该元素还隐藏一个inherit状态  也是 ...