爬虫从入门到入狱-robots

      之前在学习目标检测时需要识别几个品牌汽车的logo,为了训练需要获取些汽车图片。一个可以从百度上搜索关键词,但是比如搜索雷克塞斯得到的图片不一定是汽车的,而且图片各式各样,重复率高,质量差,有的非常模糊不利于训练。也可以从ImageNet等图片库获取,不过也是大海捞针,不一定有你要的品牌,而且有logo的数量不多。当然还可以自己去街上4S店等地方拍摄好的图片,但是也很少,而且成本很高。 

      其实汽车之家、易车网这类专业网站都有很多高质量图片,平时收藏、学习研究、用于文案等等也是不错的,但是几张用浏览器下载就好,多了我们就可以编写爬虫自动下载。等等,最近好像又多了很多爬虫被抓的程序员,不过已经有专业人士辟谣了,很多是夸张了的宣传,所以先来看看什么是爬虫。

什么是爬虫

      看下百度百科的解释:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。所以爬虫就是个自动程序,就像在互联网大网上爬动的蜘蛛,所以被叫做spider,就像百度等搜索引擎也是用自动程序爬取网络的图片、网页、视频等信息然后分类建立索引,以便大家搜索,如百度的网页搜索被称为Baiduspider,当然搜索引擎是通用爬虫和特定爬虫的技术实现上还是不大一样,所以爬虫是普遍存在于互联网的。写爬虫程序被抓只是断章取义,从技术中立原则来说,关键看爬虫爬取了什么,然后用来做什么。想想没有百度,我们可能很难找到要的信息,我们的网站可能也是个孤岛没人访问,爬虫提高了效率,只是我们要谨慎使用。

      当然这只是简单的概念,具体爬虫是怎么爬呢?

爬虫的原理

      首先我们想下平时我们是怎么上网的,从电脑打开浏览器,输入网址也就是一个URL,然后回车获取网站上的文字图片和视频等数据下载到本地浏览器,最后按一定顺序展示出来,而这后面的基础是http请求,HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法,是一套通过网络进行计算机数据通信的规则。而爬虫就是用程序模拟人浏览网页的过程,所以也就是自动构建一个http请求来获取数据。

爬虫从入门到入狱-robots_第1张图片
http请求与响应

大致的过程是

用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。GET是获取数据,POST是发送数据。HTTP报文包括请求行、请求头和请求体等组成。请求行就像一个信封告诉服务器我来自哪里,协议和方法等基本信息,而请求体就是告诉服务器我要具体拿什么数据了。

浏览器发送一个Request请求,它是封装了http报文的对象,去获取指定网页的html文件, 服务器把需要的数据封装到Response文件对象,然后发送回给浏览器。

浏览器分析Response中的 HTML,解析里面的文件,也可能有很多其它资源比如图片文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件,这时候就是在下载数据的过程。当下载后,网页再根据拼接出整个页面显示出来。

什么是robots协议

       那问题来了,我不想网页的某些内容被爬虫爬取该怎么办呢,有个叫robots的协议可以规定。Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),Robots.txt 是存放在站点根目录下的一个纯文本文件。网站通过Robots协议告诉搜索引擎哪些网站页面可以抓取,哪些网站页面不能被抓取。

       Robots.txt文件一般包含一条或更多的记录,这些记录通过空行分开(以CR,CR/NL, or NL作为结束符),每一条记录的格式如下所示:

  ":"   ,fielsd主要由User-agent、Disallow、Sitemap注释符组成

    User-agent : 描述spider爬虫的名字,就是描述用户是用什么工具来访问的,可以是爬虫,也可以是浏览器。如果有多条User-agent记录说明有多个robot会受到"robots.txt"的限制,robots.txt文件中,至少要有一条User-agent记录。如果该项的值设为*,则下面的限制对任何robot均成立。  

      Disallow:  描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以是部分的,也可以为空就表示都可以访问。

      Allow:  描述可以被访问的一组URL, 这个URL可以是一条完整的路径,也可以是路径的前缀,以Allow项的值开头的URL 是允许robot访问的。

       Sitemap: 就是词面意思站点地图,告诉爬虫网站上有哪些网页可以抓取。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。对于商业网站,sitemap就很有利于SEO,让搜索引擎更好搜索和抓取记录,可以参考http://help.bj.cn/ 生成。

      实际例子比如访问 http://news.sina.com.cn/robots.txt   页面显示

      User-agent: *

      Disallow: /wap/

      Disallow: /iframe/

      Disallow: /temp/

* 表示所有用户,disallow 包括三个网址,也就是禁止爬取 http://news.sina.com.cn/wap/ http://news.sina.com.cn/iframe/  http://news.sina.com.cn/temp/ 三个网址的内容

      如果要允许所有用户抓取所有站点的页面可以写成:

User-agent: *

Disallow:

或者

User-agent: *

Allow: /

*代表所有  /代表目录

如果想只让百度索引自己的网站,其它爬虫禁止爬取则可以写成:

User-agent: Baiduspider

Disallow:

User-agent: *

Disallow: /

如果要禁止百度抓取网站的图片文件可以写成:

User-agent: Baiduspider

Disallow: .jpg$

Disallow: .jpeg$

Disallow: .gif$

Disallow: .png$

Disallow: .bmp$

使用“$”的话表示是否允许访问某目录下某个后缀的文件。

如果要禁止特定搜索引擎抓取网站,比如京东的  https://www.jd.com/robots.txt

User-agent: *

Disallow: /?*

Disallow: /pop/*.html

Disallow: /pinpai/*.html?*

User-agent: EtaoSpider

Disallow: /

User-agent: HuihuiSpider

Disallow: /

User-agent: GwdangSpider

Disallow: /

User-agent: WochachaSpider

Disallow: /

EtaoSpider、HuihuiSpider、GwdangSpider、WochachaSpider这些就是一淘 、我查查等著名爬虫。

robots协议就是网站为了保护用户隐私安全、商业数据安全和网站性能安全等行业内自己约定的规范。 

Robots协议的使用

网络爬虫:

自动或人工识别robots.txt,再进行内容爬取

约束性:

Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险

爬虫的危害

影响服务器性能

可见爬虫是模拟用户浏览器访问,如果有短时间大量的用户访问势必影响网站性能,而爬虫这自动程序会有更快的访问速度。

侵犯用户隐私

很多网站有着大量用户的隐私数据,比如个人卡号、电话号、公积金、不动产等等,那么如果泄露这些数据对于用户的隐私权是巨大侵害。

侵犯网站产权

比如爬取的数据是不被公开的商业秘密,或者是网站盈利的主要模式,或者是独创的知识产权,就会构成不正当竞争,例如爬取qq音乐的音乐用于盈利,肯定是侵犯了qq网站的权益。

反爬虫

既然爬虫是有风险的,那么如何限制爬虫,有些常见的策略

一个就是上面所说的robots.txt文件里加入user-agent限制请求,限制一些爬虫,或者对请求Headers的User-Agent进行检测,在网站加入user-agent白名单,只允许部分可以访问。

一种用限制ip的方法来反爬虫,比如短时间一个ip不断快速大量访问,可能就判断爬虫了

还有就是通过页面的js脚本来限制,比如设置数字验证码或是图像验证码

还比如字体反爬虫,网页在开发者模式打开看很多文字是乱码,比如汽车之家

当然这些是比较常见的技术手段,当然还有更为复杂的方式,比如网站只是动态框架页面,抓取后只是框架没内容,还有对动态请求加密的,参数无法解析,也就无法进行抓取。

反反爬虫


       看到这很多稍微了解的法律工作者或者用户管理者就会说那很简单,制定反爬虫的相关法规就好了,其实没有一劳永逸的简单方法,道高一尺魔高一丈,总有研究技术的有办法解决,这就是反反爬,比如模拟cookie,多用户登录,多时段爬取等等方法,这里就不再具体讲了,网络上各种爬虫课程都会介绍。而且另一方面,这个robots协议其实也是个行业的技术规范,其实就是个君子协议,没有非常明确的法律案例,没法做更具体更实操性的操作,就像是开源协议等等,而且也是时刻变化的,你只能自觉遵守,如果违反了但是没人投诉也不会有什么,有投诉那也是非常难决策了,耗时耗力成本高。而且就像我们常看的广告里说的最终解释权归商家解释一样,很多robots设定也是网站设置,并不能说明是否可以爬取,那就无法公正解释了,只能从知识产权来说,但也有很多平台也是收集个人原创数据的,那你说如何界定呢。

那么我们该如何决策和更好学习呢

可以从法律一般规则和数据产权角度看,一般要遵守的是

1、个人隐私的暴露

像个人电话、收集短信,聊天记录、所在位置一般是不能公开,属于个人隐私的就避免爬取了。爬了也只能是做内部分析,不能泄露。

2、数据侵权的情况

包括对基本人权的侵害,现在大数据时代,越来越多平台和企业注重大数据,大数据核心价值是分析、评估和预测,比如在股票分析,物价波动等领域,但如果有人盗取暴露相关信息,就会影响社会稳定,也会影响个人,从而削减了社会创新、个人发展,企业创新等等权利。这些数据肯定也只是自己玩下就好了。

第二个是对用户隐私的侵害

这不仅是对个人的保护,也是对一些国家机密的保护

第三个是对数据产权的侵害

这些数据很多是创新的源泉,如果都不能被保护那即是从另一个方面套取商业机密,同时就违反了正当公平的竞争。

所以主要原则是不违背基本法律法规,比如可以参考美国的《消费者隐私权法案》、欧盟的《通用数据保护条例》,我国主要就是参考基本的《反不正当竞争法》、《中华人民共和国网络安全法》、《信息安全技术个人信息安全规范》等相关法规了。



参考:

http://www.liuheng.org/jishu/1156.html

《掘金大数据》  电信数据金矿详解、挖掘及应用

https://blog.csdn.net/mygodit/article/details/83572985

你可能感兴趣的:(爬虫从入门到入狱-robots)