爬虫框架概述

综述

爬虫入门以后,咱们有两条路能够走。python

一个是继续深刻学习,以及关于设计模式的一些知识,强化Python相关知识,本身动手造轮子,继续为本身的爬虫增长分布式,多线程等功能扩展。另外一条路即是学习一些优秀的框架,先把这些框架用熟,能够确保可以应付一些基本的爬虫任务,也就是所谓的解决温饱问题,而后再深刻学习它的源码等知识,进一步强化。git

就我的而言,前一种方法其实就是本身动手造轮子,前人其实已经有了一些比较好的框架,能够直接拿来用,可是为了本身可以研究得更加深刻和对爬虫有更全面的了解,本身动手去多作。后一种方法就是直接拿来前人已经写好的比较优秀的框架,拿来用好,首先确保能够完成你想要完成的任务,而后本身再深刻研究学习。第一种而言,本身探索的多,对爬虫的知识掌握会比较透彻。第二种,拿别人的来用,本身方便了,但是可能就会没有了深刻研究框架的心情,还有可能思路被束缚。github

不过我的而言,我本身偏向后者。造轮子是不错,可是就算你造轮子,你这不也是在基础类库上造轮子么?能拿来用的就拿来用,学了框架的做用是确保本身能够知足一些爬虫需求,这是最基本的温饱问题。假若你一直在造轮子,到最后都没造出什么来,别人找你写个爬虫研究了这么长时间了都写不出来,岂不是有点得不偿失?因此,进阶爬虫我仍是建议学习一下框架,做为本身的几把武器。至少,咱们能够作到了,就像你拿了把枪上战场了,至少,你是能够打击敌人的,比你一直在磨刀好的多吧?web

框架概述

博主接触了几个爬虫框架,其中比较好用的是 Scrapy 和PySpider。就我的而言,pyspider上手更简单,操做更加简便,由于它增长了 WEB 界面,写爬虫迅速,集成了phantomjs,能够用来抓取js渲染的页面。Scrapy自定义程度高,比 PySpider更底层一些,适合学习研究,须要学习的相关知识多,不过本身拿来研究分布式和多线程等等是很是合适的。设计模式

在这里博主会一一把本身的学习经验写出来与你们分享,但愿你们能够喜欢,也但愿能够给你们一些帮助。网络

PySpider

PySpiderbinux作的一个爬虫架构的开源化实现。主要的功能需求是:多线程

  • 抓取、更新调度多站点的特定的页面
  • 须要对页面进行结构化信息提取
  • 灵活可扩展,稳定可监控

而这也是绝大多数python爬虫的需求 —— 定向抓取,结构化化解析。可是面对结构迥异的各类网站,单一的抓取模式并不必定能知足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件每每不够灵活,因而,经过脚本去控制抓取是最后的选择。
而去重调度,队列,抓取,异常处理,监控等功能做为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了这套框架。架构

pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫python爬虫

  • 经过python脚本进行结构化信息的提取,follow连接调度抓取控制,实现最大的灵活性
  • 经过web化的脚本编写、调试环境。web展示调度状态
  • 抓取环模型成熟稳定,模块间相互独立,经过消息队列链接,从单进程到多机分布式灵活拓展

pyspider-arch

pyspider的架构主要分为 scheduler(调度器), fetcher(抓取器), processor(脚本执行):框架

  • 各个组件间使用消息队列链接,除了scheduler是单点的,fetcher 和 processor 都是能够多实例分布式部署的。 scheduler 负责总体的调度控制
  • 任务由 scheduler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),造成闭环。
  • 每一个脚本能够灵活使用各类python库对页面进行解析,使用框架API控制下一步抓取动做,经过设置回调控制解析动做。

Scrapy

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 能够应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来讲, 网络抓取 )所设计的, 也能够应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途普遍,能够用于数据挖掘、监测和自动化测试

Scrapy 使用了 Twisted 异步网络库来处理网络通信。总体架构大体以下

Scrapy
 

Scrapy主要包括了如下组件:

  • 引擎(Scrapy): 用来处理整个系统的数据流处理, 触发事务(框架核心)
  • 调度器(Scheduler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 能够想像成一个URL(抓取网页的网址或者说是连接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是创建在twisted这个高效的异步模型上的)
  • 爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取本身须要的信息, 即所谓的实体(Item)。用户也能够从中提取出连接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证明体的有效性、清除不须要的信息。当页面被爬虫解析后,将被发送到项目管道,并通过几个特定的次序处理数据。
  • 下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工做是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程大概以下:

  • 首先,引擎从调度器中取出一个连接(URL)用于接下来的抓取
  • 引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
  • 而后,爬虫解析Response
  • 如果解析出实体(Item),则交给实体管道进行进一步的处理。
  • 如果解析出的是连接(URL),则把URL交给Scheduler等待抓取

结语

对这两个框架进行基本的介绍以后,接下来我会介绍这两个框架的安装以及框架的使用方法,但愿对你们有帮助。

相关文章
相关标签/搜索