1 爬虫认识以及环境配置

1.1 认识爬虫

1.1.1 爬虫的概念

网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。
网络爬虫就像一只蜘蛛一样在互联网上沿着URL的丝线爬行,下载每一个URL所指向的网页,分析页面内容

  • 浏览网页基本流程
    在这里插入图片描述

1.1.2 爬虫的原理

1.通用网络爬虫

通用网络爬虫又称为全网爬虫,其爬行对象由一批种子URL扩充至整个Web,该类爬虫比较适合为搜索引擎搜索广泛的主题,主要由搜索引擎或大型Web服务提供商使用。

  • 深度优先策略:按照深度由低到高的顺序,依次访问下一级网页链接,直到无法再深入为止。
  • 广度优先策略:按照网页内容目录层次的深浅来爬行,优先爬取较浅层次的页面。当同一层中的页面全部爬行完毕后,爬虫再深入下一层。

2. 聚焦网络爬虫

聚焦网络爬虫又被称作主题网络爬虫,其最大的特点是只选择性地爬行与预设的主题相关的页面。

  • 基于内容评价的爬行策略:该种策略将用户输入的查询词作为主题,包含查询词的页* 面被视为与主题相关的页面。
  • 基于链接结构评价的爬行策略:该种策略将包含很多结构信息的半结构化文档Web页面用来评价链接的重要性,其中一种广泛使用的算法为PageRank算法
  • 基于增强学习的爬行策略:该种策略将增强学习引入聚焦爬虫,利用贝叶斯分类器对超链接进行分类,计算出每个链接的重要性,按照重要性决定链接的访问顺序。
  • 基于语境图的爬行策略:该种策略通过建立语境图学习网页之间的相关度,计算当前页面到相关页面的距离,距离越近的页面中的链接优先访问。

3. 增量式网络爬虫

增量式网络爬虫只对已下载网页采取增量式更新或只爬行新产生的及已经发生变化的网页,需要通过重新访问网页对本地页面进行更新,从而保持本地集中存储的页面为最新页面。

  • 常用的更新方法如下。
    统一更新法:以相同的频率访问所有网页,不受网页本身的改变频率的影响。
    个体更新法:根据个体网页的改变频率来决定重新访问各页面的频率。
    基于分类的更新法:爬虫按照网页变化频率分为更新较快和更新较慢的网页类别,分别设定不同的频率来访问这两类网页。

4. 深层网络爬虫

Web页面按照存在方式可以分为表层页面和深层页面两类。表层页面指以传统搜索引擎可以索引到的页面,深层页面为大部分内容无法通过静态链接获取,隐藏在搜索表单后的,需要用户提交关键词后才能获得的Web页面。
深层爬虫的核心部分为表单填写,包含以下两种类型。
基于领域知识的表单填写:该种方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。
基于网页结构分析的表单填写:这种方法一般无领域知识或仅有有限的领域知识,将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理,从中提取表单各字段值。

1.1.3 爬虫的合法性

目前,多数网站允许将爬虫爬取的数据用于个人使用或者科学研究。但如果将爬取的数据用于其他用途,尤其是转载或者商业用途,严重的将会触犯法律或者引起民事纠纷。
以下两种数据是不能爬取的,更不能用于商业用途。
个人隐私数据:如姓名、手机号码、年龄、血型、婚姻情况等,爬取此类数据将会触犯个人信息保护法。
明确禁止他人访问的数据:例如用户设置了账号密码等权限控制,进行了加密的内容。
还需注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载或用于商业用途。

1.1.4 robots协议

robots协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准( Robots Exclusion Protocol ),当使用一个爬虫爬取一个网站的数据时,需要遵守网站所有者针对所有爬虫所制定的协议。
它通常是一个叫作robots.txt的文本文件,该协议通常存放在网站根目录下,里面规定了此网站哪些内容可以被爬虫获取,及哪些网页是不允许爬虫获取的。

robots.txt 的样例

User-agent: * 
Disallow: /
Allow: /public/

这实现了对所有搜索爬虫只允许爬取public目录的功能,将上述内容保存成robots.txt文件,放在网站的根目录下,和网站的入口文件(比如index.php、index.html和index.jsp等)放在一起。
上面的User-agent描述了搜索爬虫的名称,这里将其设置为*则代表该协议对任何爬取爬虫有效。 比如,我们可以设置:User-agent: Baiduspider 。这就代表我们设置的规则对百度爬虫是有效的。 如果有多条User-agent记录,则就会有多个爬虫会受到爬取限制,但至少需要指定一条。 Disallow 指定了不允许抓取的目录,比如上例子中设置为/则代表不允许抓取所有页面。Allow一般和Disallow一起使用,一般不会单独使用,用来排除某些限制。 现在我们设置为/public/,则表示所有页面不允许抓取,但可以抓取public目录。

  • 禁止所有爬虫访问任何目录的代码如下:
User-agent: * 
Disallow: /
  • 允许所有爬虫访问任何目录的代码如下:
User-agent: * 
Disallow: 
  • 禁止所有爬虫访问网站某些目录的代码如下:
User-agent: * 
Disallow: /private/ 
Disallow: /tmp/
  • 只允许某一个爬虫访问的代码如下:
User-agent: WebCrawler
Disallow: 
User-agent: * 
Disallow: /

robotparser 模块

了解 Robots 协议之后,我们就可以使用robotparser模块来解析robots.txt了。 该模块提供了一个类RobotFileParser,它可以根据某网站的robots.txt文件来判断一个爬取爬虫是否有权限来爬取这个网页。
该类用起来非常简单,只需要在构造方法里传入robots.txt的链接即可。 首先看一下它的声明:urllib.robotparser.RobotFileParser(url=’’),当然也可以在声明时不传入,默认为空,最后再使用 set_url()方法设置一下也可。

1.1.5 常用方法

  • set_url():用来设置robots.txt文件的链接。 如果在创建RobotFileParser对象时传入了链接,那么就不需要再使用这个方法设置了。
  • read():读取robots.txt文件并进行分析。 注意,这个方法执行一个读取和分析操作,如果不调用这个方法, 接下来的判断都会为False,所以一定记得调用这个方法。 这个方法不会返 回任何内容,但是执行了读取操作。
  • parse():用来解析robots.txt文件,传人的参数是robots.txt某些行的内容,它会按照robots.txt的语法规则来分析这些内容。
  • can_fetch():该方法传入两个参数, 第一个是User-agent,第二个是要抓取的URL。 返回的内容是该搜索引擎是否可以抓取这个URL,返回结果是True或False。
  • mtime():返回的是上次抓取和分析robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt。
  • modified() :它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取 和分析robots.txt的时间。

1.2 认识反爬虫

1.2.1 网站反爬虫的目的与手段

1. 通过User-Agent校验反爬

浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,服务器会通过User-Agent的值来区分不同的浏览器。
在这里插入图片描述

2. 通过访问频度反爬

普通用户通过浏览器访问网站的速度相对爬虫而言要慢的多,所以不少网站会利用这一点对访问频度设定一个阈值,如果一个IP单位时间内访问频度超过了预设的阈值,将会对该IP做出访问限制。
通常需要经过验证码验证后才能继续正常访问,严重的甚至会禁止该IP访问网站一段时间。

3. 通过验证码校验反爬

有部分网站不论访问频度如何,一定要来访者输入验证码才能继续操作。例如12306网站,不管是登陆还是购票,全部需要验证验证码,与访问频度无关。

4. 通过变换网页结构反爬

一些社交网站常常会更换网页结构,而爬虫大部分情况下都需要通过网页结构来解析需要的数据,所以这种做法也能起到反爬虫的作用。在网页结构变换后,爬虫往往无法在原本的网页位置找到原本需要的内容。

5. 通过账号权限反爬

部分网站需要登录才能继续操作,这部分网站虽然并不是为了反爬虫才要求登录操作,但确实起到了反爬虫的作用。
例如微博查看评论就需要登录账号。

1.2.2 爬取策略

针对之前介绍的常见的反爬虫手段,可以制定对应的爬取策略如下。

  • 发送模拟User-Agent:通过发送模拟User-Agent来通过检验,将要发送至网站服务器的请求的User-Agent值伪装成一般用户登录网站时使用的User-Agent值。
  • 调整访问频度:通过备用IP测试网站的访问频率阈值,然后设置访问频率比阈值略低。这种方法既能保证爬取的稳定性,又能使效率又不至于过于低下。
  • 通过验证码校验:使用IP代理,更换爬虫IP;通过算法识别验证码;使用cookie绕过验证码。
  • 应对网站结构变化:只爬取一次时,在其网站结构调整之前,将需要的数据全部爬取下来;使用脚本对网站结构进行监测,结构变化时,发出告警并及时停止爬虫。
    通过账号权限限制:通过模拟登录的方法进行规避,往往也需要通过验证码检验。
  • 通过代理IP规避:通过代理进行IP更换可有效规避网站检测,需注意公用IP代理池是 网站重点监测对象。

1.3 环境配置

1.3.1 Python爬虫相关库介绍与配置

Python爬虫相关库
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值