爬虫的起源爬虫的起源可以追溯到万维网(Internet)的诞生,当时还没有搜索到Internet。在开发搜索引擎之前,Internet只是文件传输协议(FTP)站点的集合,用户可以导航这些站点以查找特定的共享文件。为了找到并组合Internet上可用的分布式数据,人们创建了一个称为网络爬虫/机器人的自动化程序,它会爬取Internet上的所有网页,然后将所有页面上的内容复制到数据库中以供索引。爬虫的发展随着互联网的发展,网络上的资源越来越丰富但异构,获取信息的成本也越来越高。相应地,逐渐开发出更智能、适用性更强的爬虫软件。它们类似于蜘蛛,通过放射状的蛛网获取信息,进而捕捉到自己想要的猎物,因此爬虫也被称为网蛛。当然,爬虫软件比蜘蛛网更活跃。此外,爬虫还有一些不常见的名字,比如ants/simulators/worms。爬虫的工作流程大致如下:通常,在爬取网页数据时,只需要两步:打开网页→将网页中的具体数据复制导出到表格或资源库中。简单地说,抓住并复制。爬虫的君子协定搜索引擎的爬虫是用心良苦的,可以把你的所有信息都搜出来,提供给其他用户访问。为此,他们还专门将robots.txt文件定义为君子协定。Robots协议(爬虫协议)的全称是“网络爬虫排除标准”(RobotsExclusionProtocol),网站通过Robots协议告诉搜索引擎哪些页面可以被抓取,哪些页面不能被抓取。本协议是互联网社区共同的道德准则。虽然没有写成法律,但是每个爬虫都应该遵守这个约定。以淘宝的robots.txt为例,允许robots访问以Allow项的值为开头的url。例如Allow:/article允许百度爬虫引擎访问/article.htm、/article/http://12345.com等。以Disallow项开头的链接不允许百度爬虫引擎访问。例如Disallow:/product/不允许百度爬虫引擎访问/product/http://12345.com等。最后一行Disallow:/禁止百度爬虫访问除Allow指定的页面外的所有页面。所以你不能从百度搜索淘宝内部的产品信息。君子之约虽好,但东西很快就被一些人破坏了,于是就有了反爬虫。爬虫与反爬虫爬虫与反爬虫是“矛”与“盾”的攻守关系。有了爬虫,自然就会有反爬虫。为了保证服务器的正常运行,降低服务器的运行压力和成本,一些企业不得不使用各种手段来阻止爬虫工程师无节制地向服务器请求资源。我们称这种行为为反爬虫。在爬虫与反爬虫的较量中,经常会提到一些反爬虫,比如文本混淆反爬虫、动态渲染反爬虫、信息验证反爬虫、代码混淆反爬虫……等等。反爬虫技术是如何防御爬虫的,其实现原理是什么?下面是一个信息验证和反爬虫的例子,《鹿鼎记》的魏香珠给大家演示一下。假设天地会赤火堂香主从京城派人到扬州,给青木堂香主韦小宝送了一封很重要的密信,我们可以把这件事情抽象成下图:这件事情的核心是“帮派成员-A交出一份重要的给黑帮成员-B的密信”。假设A和B互不认识,素未谋面,“黑帮成员-A”如何判断这封密信是交给“黑帮成员-B”,而不是交给了错误的人——其他人”帮派成员——“丁”呢?历史上肯定是吃过这样的亏。随天地会采用连码的方式,保证甲乙双方都是同一个帮派的成员。修;门面海,三水千百年,密码只有帮派成员知道,不能泄露。千古”,“帮派-B”听到后必须说下一句,“门临海,三江汇于水。年流量”。如果“帮派-B”不知道下一句是什么,或者在胡说八道,那么“帮派-A”就可以确定他不是连接器,而是冒牌货。同理,“帮派-B”需要听到帮派-A说“小镇高岗,千古秀山河一派”,否则“帮派-A”是假的,很有可能假的密信会交给青木堂的韦小宝,天地会的connector之间相互传递消息(密信),很像我们开发WEB应用时的Client和Server,抽象起来是这样的:那么问题来了,天地会client和server之间需要这样的密码吗?什么?答案是需要!client就像是“gangmember-A”,server就像是“gangmember-B”,他们的密信很可能被拿走或由其他“帮派成员-D”伪造。既然世界上都会有一个连接码,那么Client和Server之间用什么来保证消息是第一手发送的,而不是被拦截和伪造的呢?是的,签名验证!签名验证是目前IT技术领域广泛使用的API接口数据保护方式之一,它可以有效防止消息接收端将被篡改或伪造的消息当作正常消息对待。需要说明的是,其作用是防止报文接收端将篡改或伪造的报文当作正常报文处理,而不是防止报文接收端收到虚假报文。实际上,接口并不能在收到消息的一瞬间就判断消息。真假。这很重要,不要混淆。假设Client要将“下月五日刺鳌拜”这封重要密信交给Server,抽象图如下:如果此时发生冒充事件,会产生什么影响:其他客户端的“帮派成员-叮”得到消息后,伪造刺杀鳌拜的时间从5号到6号,导致服务器收到的刺杀时间为6号。如此一来,内外联手刺杀鳌拜就成了一方拖延。这场蓄谋已久的刺杀行动很可能会失败,造成不小的损失。我们使用签名验证来改进此消息传递和验证。这里的签名校验可以简单理解为在原始报文的基础上进行一定的计算和加密规则,最后将加密后的结果放入报文中一起发送。消息接收者收到消息后,按照相同的规则进行计算和加密。将自己计算出的加密值与传递过来的加密值进行比较。如果两个值相同,则说明该消息没有被拦截和伪造。否则,可以确定该消息已被拦截和伪造。签名验证被广泛使用。例如下载操作系统镜像文件时,官网会提供该文件的MD5值,以及阿里巴巴/腾讯/华为等公司开放的接口认证部分的符号值。以上防爬方法选自《Python3 反爬虫原理与绕过实战》,写在最后。爬虫本身并不违法。但在程序运行过程中,可能会对他人运营的网站造成损害,爬取的数据可能涉及隐私或机密,数据本身也可能引起法律纠纷。
