array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 1.爬虫基本认识 - python爬虫基础(一) - 爱码网

目录

1.认识爬虫前以一张图了解浏览网页的基本流程:

2.网络爬虫概念:

3.爬虫分类:

①通用爬虫:(百度搜索等)

②聚焦爬虫

③增量式网络爬虫:

④深层网络爬虫:

4. 爬虫的合法性

①概念

 ②robots协议

③访问网站robots协议(君子协定)

5.网站反爬虫的目的与手段  :

6.爬取策略制定


1.认识爬虫前以一张图了解浏览网页的基本流程:

1.爬虫基本认识 - python爬虫基础(一)

2.网络爬虫概念:

也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。

网络爬虫就像一只蜘蛛一样在互联网上沿着URL的丝线爬行,下载每一个URL所指向的网页,分析页面内容

 

3.爬虫分类:

①通用爬虫:(百度搜索等)

通用网络爬虫又称为全网爬虫,其爬行对象由一批种子URL扩充至整个Web,该类爬虫比较适合为搜索引擎
搜索广泛的主题,主要由搜索引擎或大型Web服务提供商使用。
--- 深度优先策略:按照深度由低到高的顺序,依次访问下一级网页链接,直到无法再深入为止。
--- 广度优先策略:按照网页内容目录层次的深浅来爬行,优先爬取较浅层次的页面。当同一层中的页面全部
                             爬行完毕后,爬虫再深入下一层。

②聚焦爬虫

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

--- 基于内容评价的爬行策略:该种策略将用户输入的查询词作为主题,包含查询词的页面被视为与主题相 关的页面。

--- 基于链接结构评价的爬行策略:该种策略将包含很多结构信息的半结构化文档Web页面用来评价链接的 重要性,其中一种广                                                           泛使用的算法为PageRank算法。

--- 基于增强学习的爬行策略:该种策略将增强学习引入聚焦爬虫,利用贝叶斯分类器对超链接进行分类,计 算出每个链接的重                                                    要性,按照重要性决定链接的访问顺序。

--- 基于语境图的爬行策略:该种策略通过建立语境图学习网页之间的相关度,计算当前页面到相关页面的距 离,距离越近的页                                                面中的链接优先访问。 

增量式网络爬虫:

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

--- 统一更新法:以相同的频率访问所有网页,不受网页本身的改变频率的影响。

--- 个体更新法:根据个体网页的改变频率来决定重新访问各页面的频率。
 
--- 基于分类的更新法:爬虫按照网页变化频率分为更新较快和更新较慢的网页类别,分别设定不同的频率来 访问这两类网页。

 

深层网络爬虫:

Web页面按照存在方式可以分为表层页面和深层页面两类。表层页面指以传统搜索引擎可以索引到的页面,深层页面为大部分内容无法通过静态链接获取,隐藏在搜索表单后的,需要用户提交关键词后才能获得的Web页 面。 深层爬虫的核心部分为表单填写,包含以下两种类型。

--- 基于领域知识的表单填写:该种方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。

--- 基于网页结构分析的表单填写:这种方法一般无领域知识或仅有有限的领域知识,将HTML网页表示为DOM 树形式,将表单                                                           区分为单属性表单和多属性表单,分别进行处理,从中提取表单各字段值

 

4. 爬虫的合法性

①概念

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

 

 ②robots协议

--- robots协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准( Robots Exclusion

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

③访问网站robots协议(君子协定)

在域名后面输入/robots.txt

例如:https://www.csdn.net/robots.txt

 

5.网站反爬虫的目的与手段  

通过User-Agent校验反爬

浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,服务器会通过User-Agent
的值来区分不同的浏览器。
1.爬虫基本认识 - python爬虫基础(一)
 
通过访问频度反爬
 
--- 普通用户通过浏览器访问网站的速度相对爬虫而言要慢的多,所 以不少网站会利用这一点对访问频度设定一个阈值,如果一个IP 单位时间内访问频度超过了预设的阈值,将会对该IP做出访问限 制。
 
--- 通常需要经过验证码验证后才能继续正常访问,严重的甚至会禁 止该IP访问网站一段时间。
 
③ 通过验证码校验反爬
有部分网站不论访问频度如何,一定要来访者输入验证 码才能继续操作。例如12306网站,不管是登陆还是购票,全部需要验证验证码,与访问频度无关。

 

通过变换网页结构反爬

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

通过账号权限反爬

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

6.爬取策略制定

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

相关文章: