scrapy爬虫框架

  这是我近期学习的一些内容,可能不仅仅局限于scrapy爬虫框架,还会有很多知识的扩展。写的可能不是那么有条理,想到什么就写什么吧,毕竟也是自己以后深入学习的基础,有些知识说的不够明白欢迎留言,共同学习!

一、框架详解

Scrapy是由Twisted写的一个受欢迎的python事件驱动网络框架,它使用的是非阻塞的异步处理。

1.内部各组件的作用

  ScrapyEngine(scrapy引擎):是用来控制整个系统的数据处理流程,并进行事务处理的触发。

  Scheduler(调度器):用来接收引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。它就像是一个URL的优先队列,由它来决定下一个要抓取的网址是什么,同时在这里会去除重复的网址。

  Downloader(下载器):用于下载网页内容,并将网页内容返回给爬虫(Spiders)(Scrapy下载器是建立在Twisted这个高效的异步模型上的)。

  Spiders(爬虫):爬虫主要是干活的,用于从特定网页中提取自己需要的信息,即所谓的实体(Item)。也可以从中提取URL,让scrapy继续爬取下一个页面。

  Pipeline(项目管道):负责处理爬虫从网页中爬取的实体,主要的功能就是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被送到项目管道,并经过几个特定的次序处理数据。

  Downloader Middlewares(下载器中间件):位于scrapy引擎和下载器之间的框架,主要是处理scrapy引擎与下载器之间的请求及响应。设置代理ip和用户代理可以在这里设置。

  Spider Middlewares(爬虫中间件):位于scrapy引擎和爬虫之间的框架,主要工作是处理爬虫的响应输入和请求输出。

  Scheduler Middlewares(调度中间件):位于scrapy引擎和调度器之间的框架,主要是处理从scrapy引擎发送到调度器的请求和响应。

2.Scrapy运行流程

  引擎从调度器中取出一个URL用于接下来的抓取

  引擎把URL封装成一个请求(Request)传给下载器

  下载器把资源下载下来,并封装成一个响应(Response)

  爬虫解析Response

  解析出的是实体(Item),则交给项目管道(Pipeline)进行进一步的处理

  解析出的是链接(URL),则把URL交给调度器等待下一步的抓取

二、为什么使用scrapy?爬虫能做什么?

1.Scrapy vs requests+beautifulsoup

  首先,requests和beautifulsoup都是库,scrapy是框架;在scrapy框架中可以加入requests和beautifulsoup,它是基于Twisted(异步非阻塞)实现的,性能上有很大的优势;scrapy方便扩展,提供了很多内置的功能;它内置的css和Xpath以及selector提取数据的时候非常高效,beautifulsoup最大的缺点就是慢。

2.爬虫能做什么?

  搜索引擎(如百度、Google)、推荐引擎(如今日头条)、机器学习的数据样本、数据分析(如金融数据分析)、舆情分析等

三、爬虫基础知识

1.正则表达式

为什么使用正则表达式?

  有时候,我们爬取一些网页具体内容时,会发现我们只需要这个网页某个标签的一部分内容,或者这个标签的某个属性的值时,用xpath和css不太好提取数据,这时候我们就需要用到正则表达式去匹配提取。

re模块简介  

 re模块

常用的一些正则元字符

 元字符
 re模块深入
 JavaScript正则表达式
 状态码

2.深度优先和广度优先遍历算法

  深度优先搜索(DepthFirstSearch):深度优先搜索的主要特征就是,假设一个顶点有不少相邻顶点,当我们搜索到该顶点,我们对于它的相邻顶点并不是现在就对所有都进行搜索,而是对一个顶点继续往后搜索,直到某个顶点,它周围相邻顶点都已经被访问过了,这时它就可以返回,对它原来的那个顶点的其余顶点进行搜索。深度优先搜索的实现可以利用递归很简单的实现。

  广度优点搜索(BreadthFirstSearch):广度优先搜索相对于深度优先搜索侧重点不一样,深度优先好比一个人走迷宫,一次只能选定一条路走下去,而广度优先搜索好比是一次能有任意多个人,一次就走到和一个顶点相连的所有未访问过的顶点,然后再从这些顶点出发,继续这个过程。

3.url常见的去重策略

  将访问过的url保存到数据库中

  将访问过的url保存到set中,只需要o(1)的代价就可以查询url

  url经过MD5等方法哈希后保存到set中

  用bitmap方法,将访问过的url通过hash函数映射到某一位

  bloomfilter方法对bitmap进行改进,多重hash函数降低冲突

4.爬虫与反爬虫

基本概念:  

  爬虫:自动获取网站数据的程序,关键是批量的获取

  反爬虫:使用技术手段防止爬虫程序的方法

  误伤:反爬虫技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能用

  成本:反爬虫需要的人力和机器成本

  拦截:成功拦截爬虫,一般拦截率越高,误伤率越高

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信