通俗的讲,网络爬虫到底是什么?

优采云 发布时间: 2020-05-06 08:03

  爬虫的起源

  爬虫的起源可以溯源到万维网(互联网)诞生之初,一开始互联网还没有搜索。在搜索引擎没有被开发之前,互联网只是文件传输协议(FTP)站点的集合,用户可以在这种站点中导航以找到特定的共享文件。

  为了查找和组合互联网上可用的分布式数据,人们创建了一个自动化程序,称为网络爬虫/机器人,可以抓取互联网上的所有网页,然后将所有页面上的内容复制到数据库中制做索引。

  

  爬虫的发展

  随着互联网的发展,网络上的资源显得愈发丰富但却粗疏不堪,信息的获取成本显得更高了。

  相应地,也渐渐发展出愈发智能,且适用性更强的爬虫软件。

  它们类似于蜘蛛通过幅射出去的蛛网来获取信息,继而从中捕获到它想要的猎物,所以爬虫也被称为网页蜘蛛,当然相较蛛网而言,爬虫软件更具主动性。另外,爬虫还有一些不常用的名子,像蚂蚁/模拟程序/蠕虫。

  爬虫的工作流程大致如下:

  

  通常,爬取网页数据时,只须要2个步骤:

  打开网页→将具体的数据从网页中复制并导入到表格或资源库中。

  简单来说就是,抓取和复制。

  爬虫的君子合同

  搜索引擎的爬虫是善意的,可以检索你的一切信息,并提供给其他用户访问,为此它们还专门定义了robots.txt文件,作为君子合同。

  Robots协议(爬虫协议)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎什么页面可以抓取,哪些页面不能抓取。该合同是国际互联网界通行的道德规范,虽然没有写入法律,但是每一个爬虫都应当遵循这项合同。

  以淘宝网的robots.txt为例,

  

  以 Allow 项的值开头的 URL 是容许 robot 访问的。例如,Allow:/article 允许百度爬虫引擎访问 /article.htm、/article/http://12345.com 等。

  以 Disallow 项为开头的链接是不容许百度爬虫引擎访问的。例如,Disallow:/product/ 不容许百度爬虫引擎访问 /product/http://12345.com 等。

  最后一行,Disallow:/ 禁止百度爬虫访问不仅 Allow 规定页面外的其他所有页面。

  所以你是不能从百度上搜索到淘宝内部的产品信息的。

  君子合同虽好,然而事情很快就被一些人破坏了,于是就有了反爬虫。

  爬虫与反爬虫

  爬虫与反爬虫是“矛”与“盾”的攻防关系,有了爬虫自然也就有了反爬虫。

  一些企业为了保证服务器的正常运转,降低服务器的运转压力与成本,不得不使出各种各样的手段来制止爬虫工程师毫无节制地向服务器索要资源,这种行为我们称之为反爬虫。

  在爬虫与反爬虫的对决上,一些反爬手段往往会使人津津乐道,比如,文本混淆反爬虫、动态渲染反爬虫、信息校准反爬虫、代码混淆反爬虫……等等。

  反爬虫技术是怎样对爬虫进行防御的,其实现原理是哪些?以下就以信息校准反爬为例,请《鹿鼎记》的韦香主给你们做一下演示。

  

  假设天地会赤火堂香主派人从京城抵达南京将一封特别重要的密函交给青木堂香主韦小宝,我们可以将这件事具象为下图:

  

  这件事的核心是「帮派成员-甲将重要密函交给帮会成员-乙」。假设乙、乙双方互不相恋亦未曾有过会面,那「帮派成员-甲」如何判定密函交给了「帮派成员-乙」,而不是给错人——给了其他「帮派成员-丁」呢?

  在历史实践中肯定喝过这样的亏爬虫软件是什么,遂天地会采用了接头暗号这些方法来确保乙、乙双方是同一帮会成员,这才有了:

  暗号只有帮会成员才晓得,且不可泄露。甲、乙双方碰面时由「帮派成员-甲」说出「地乡高岗,一派溪山千古秀」,「帮派成员-乙」听到后必须接下一句「门朝大海,三河合水万年流」。如果「帮派成员-乙」不知道下一句是哪些,或者胡扯一气,那么「帮派成员-甲」就可以判断他不是接头人,而是假扮的。

  

  同样的,「帮派成员-乙」要看到帮会成员-甲说出「地乡高岗,一派溪山千古秀」。否则「帮派成员-甲」就是假扮的,很有可能会将假的密函交给青木堂韦小宝。

  

  天地会接头人相互传递消息(密函)很象是我们在开发 WEB 应用时的 Client 和 Server,抽象地看起来象这样:

  

  那么问题来了,Client 和 Server 之间需不需要天地会这样的暗号呢?

  答案是须要!

  

  Client 就像「帮派成员-甲」,Server 就像「帮派成员-乙」,而她们的密函很有可能会被其他「帮派成员-丁」拿走或伪造。既然天地会有接头暗号,那么 Client 和 Server 之间用哪些来保障传递消息是第一手发出,而不是被拦截伪造的呢?

  没错,签名验证!

  签名验证是目前 IT 技术领域应用广泛的 API 接口数据保护方法之一,它还能有效避免消息接收端将被篡改或伪造的消息当成正常消息处理。

  要注意的是,它的作用是避免消息接收端将被篡改或伪造的消息当成正常消息处理,而不是避免消息接受端接收假消息,事实上插口在收到消息的那一刻难以判定消息的真伪。这一点十分重要爬虫软件是什么,千万不要混淆了。

  假设 Client 要将「下个月 5 号暗杀鳌拜」这封重要密函交给 Server,抽象图如下:

  

  这时候倘若发生假扮风波,会带来哪些影响:

  

  其他「帮派成员-丁」从 Client 那里获得消息后进行了伪造,将暗杀鳌拜的时间从 5 号改为 6号,导致 Server 收到的暗杀时间是 6 号。这么一来,里应外合暗杀鳌拜的事都会弄成一方延后动手,这次筹谋已久的暗杀行动大几率会失败,而且会导致不小的损失。

  我们使用签名验证来改善这个消息传递和验证的事。这里可以简单将签名验证理解为在原消息的基础上进行一定规则的运算和加密,最终将加密结果放在消息中一并发送,消息接收者领到消息后根据相同的规则进行运算和加密,将自己运算得到的加密值和传递过来的加密值进行比对,如果两值相同则代表消息没有被拦截伪造,反之可以判断消息被拦截伪造。

  签名验证被广泛应用,例如下载操作系统镜像文件时官方网站会提供文件的 MD5 值、阿里巴巴/腾讯/华为等企业对外开放的插口中信令部份的 sign 值等。

  以上反爬方式选自《Python3 反爬虫原理与绕开实战》

  写在最后

  爬虫本身并未违背法律。但程序运行过程中可能对别人经营网站造成破坏,爬取的数据有可能涉及隐私或绝密,数据本身也可能形成法律纠纷。

  【编辑推荐】

  拒绝低效!Python教你爬虫公众号文章和链接5分钟撸了个小小爬虫....重点来了,Python网站爬虫原理!瓜子,矿泉水备好,慢慢品!我花 1 分钟写了一段爬虫,帮助*敏*感*词*姐解放了右手怎样用 100 行 Python 代码实现新闻爬虫?这样可算成功?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线