第六十三期:放下你手里的代码,小心被抓!

放下你手里的代码,小心被抓。最近程序员圈子不乏这样的戏谑调侃。

作者:沈春泽、李加庆来源

放下你手里的代码,小心被抓。最近程序员圈子不乏这样的戏谑调侃。

图片来自 Pexels

原因是最近发生的多起涉及爬虫技术的公司被司法部门调查。近日,51 信用卡被查,更是将暴力催收背后非法使用爬虫技术爬取个人隐私数据的丑行,暴露在阳光之下。

一时间,“爬虫”成为众矢之的,一些公司紧急下架了爬虫相关的招聘信息,给大数据风控、人工智能从业者带来些许恐慌,头发又多落了几根。

实际上,大部分人都听说过爬虫,认为爬虫就是到人家网站上去爬东西、偷数据,有些人甚至认为只要有爬虫,什么数据都可以搞到。

今天,我们就打开爬虫这个“工具箱”,把涉及到的技术盲区放到灯光下,让大家可以清楚地看下。下面,本文就从这个角度来聊聊爬虫这个熟悉而又陌生的技术。

爬虫的技术原理

搜索引擎收集网上信息的主要手段就是网络爬虫(也叫网页蜘蛛、网络机器人)。

它是一种“自动化浏览网络”的程序,按照一定的规则,自动抓取互联网信息,比如:网页、各类文档、图片、音频、视频等。

搜索引擎通过索引技术组织这些信息,根据用户的查询,快速地提供搜索结果。设想一下,我们平时浏览网页的时候会怎么做?

一般情况下,首先,会用浏览器打开一个网站的主页,在页面上寻找感兴趣的内容,然后点击本站或其他网站在该网页上的链接,跳转到新的网页,阅读内容,如此循环往复。

如下图所示:

图中的虚线圆角矩形代表一个网站,每个实线矩形表示一个网页。可以看到,每个网站一般以首页为入口,该首页链接到几个、几万个、甚至上千万个的内部网页。

同时,这些网页往往又链接了很多外部网站。例如,用户从苏宁金融的网页为起点,浏览发现了 PP 视频的链接,点击后跳转到了 PP 视频主页,作为体育爱好者,在体育频道中找到了相关的新浪微博的内容,再次点击后又来到微博的页面继续阅读,从而形成了一条路径。

如果把所有的可能路径呈现出来,就会看到一个网络结构。网络爬虫模拟了人们浏览网页的行为,只是用程序代替了人类的操作,在广度和深度上遍历网页。

如果把互联网上的网页或网站理解为一个个节点,大量的网页或网站通过超链接形成网状结构。

爬虫通过遍历网页上的链接,从一个节点跳转到下一个节点,就像是在一张巨大的网上爬行,但是比人类的速度更快,跳转的节点更全面,所以被形象地称为网络爬虫或网络蜘蛛。

爬虫的发展历史

网络爬虫最早的用途是服务于搜索引擎的数据收集,而现代意义上的搜索引擎的鼻祖是 1990 年由加拿大麦吉尔大学(University of McGill)学生 Alan Emtage 发明的的 Archie。

人们使用 FTP 服务器共享交流资源,大量的文件散布在各个 FTP 主机上,查询起来非常不方便。

因此,他开发了一个可以按照文件名查找文件的系统,能定期搜集并分析 FTP 服务器上的文件名信息,自动索引这些文件。

工作原理与现在的搜索引擎已经非常接近,依靠脚本程序自动搜索分散在各处 FTP 主机中的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。

世界上第一个网络爬虫“互联网漫游者”(“www wanderer”)是由麻省理工学院(MIT)的学生马休·格雷(Matthew Gray)在 1993 年写成。

刚开始,它只用来统计互联网上的服务器数量,后来则发展为能够通过它检索网站域名。

随着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在“互联网漫游者”基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。

其设想是,既然所有网页都可能有连向其他网站的链接,那么从跟踪一个网站的链接开始,就有可能检索整个互联网。

其后,无数的搜索引擎促使了爬虫越写越复杂,并逐渐向多策略、负载均衡及大规模增量抓取等方向发展。

爬虫的工作成果是搜索引擎能够遍历链接的网页,甚至被删除的网页也可以通过“网页快照”的功能访问。

网络爬虫的礼仪

礼仪一:robots.txt 文件

每个行业都有其 Code of Conduct,成为行为准则或行为规范。比如,你是某个协会中的成员,那就必须遵守这个协会的行为准则,破坏了行为准则是要被踢出去的。

最简单的例子,你加入的很多微信群,一般群主都会要求不可以私自发广告,如果未经允许发了广告,会被立刻踢出群,但是发红包就没事,这就是行为准则。

爬虫也有行为准则。早在 1994 年,搜索引擎技术刚刚兴起。那时的初创搜索引擎公司,比如 AltaVista 和 DogPile,通过爬虫技术来采集整个互联网的资源,与 Yahoo 这样的资源分类网站激烈竞争。

随着互联网搜索规模的增长,爬虫收集信息的能力快速进化,网站开始考虑对于搜索引擎爬取信息做出限制,于是 robots.txt 应运而生,成为爬虫界的“君子协定”。

robots.txt 文件是业内惯用做法,不是强制性的约束。robots.txt 的形式如下:

在上面这个 robots.txt 例子中,所有的爬虫都被禁止访问网站的任意内容。但是 Google 的爬虫机器人,可以访问除了 private 位置的所有内容。

如果一个网站上没有 robots.txt,是被认为默许爬虫爬取所有信息。如果 robots.txt 做了访问的限制,但是爬虫却没有遵守,那就不是技术实现这么简单的事情了。

礼仪二:爬取吞吐量的控制

曾经出现假冒 Google 搜索引擎的爬虫去对网站进行 DDoS 攻击,让网站瘫痪的事情。

近年来,恶意爬虫造成的 DDoS 攻击行为有增无减,给大数据行业蒙上了爬虫的阴影。

因为其背后的恶意攻击者,往往具备更为复杂和专业的技术,能绕过各种防御机制,让防范这样攻击行为难上加难。

礼仪三:做一个优雅的爬虫

优雅的爬虫背后,一定站着一个文明人或者一个文明团队。他们会考虑自己写的爬虫程序是否符合 robots.txt 协议,是否会对被爬网站的性能造成影响,如何才能不侵害知识产权所有者的权益以及非常重要的个人隐私数据等问题。

出于能力的差别,并不是每个爬虫团队都能考虑到这些问题。2018 年,欧盟出台的《General Data Protection Regulation》(通用数据保护条例)中对数据的保护做出了严格的说明。

2019 年 5 月 28 日,国家互联网信息办公室发布的《数据安全管理办法》(征求意见稿)对爬虫和个人信息安全做出了非常严格的规定。比如:

(1)第十六条 网络运营者采取自动化手段访问收集网站数据,不得妨碍网站正常运行;此类行为严重影响网站运行,如自动化访问收集流量超过网站日均流量三分之一,网站要求停止自动化访问收集时,应当停止。

(2)第二十七条 网络运营者向他人提供个人信息前,应当评估可能带来的安全风险,并征得个人信息主体同意。

其实,我国 2017 年 6 月 1 日施行的《中华人民共和国网络安全法》第四章第四十一条和四十四条就已经对个人隐私信息数据的收集和使用做出明文规定,这也与爬虫直接相关。

法律制度的出台,给技术的边界做出了明确的限定,技术无罪并不能作为技术实施者为自己开脱的理由。爬虫在实现自己需求的同时,必须做到严格遵守行为准则和法律条例。

各类反爬虫技术介绍

为了保护自己合法权益不被恶意侵害,不少网站和应用 App 应用了大量的反爬技术。

这使得爬虫技术中又衍生出反反爬虫技术,比如各类滑动拼图、文字点选、图标点选等验证码的破解,它们相互促进、相互发展、相互伤害着。

反爬虫的关键在于阻止被爬虫批量爬取网站内容,反爬虫技术的核心在于不断变更规则,变换各类验证手段。

这类技术的发展甚至让人痴迷,比 DOTA 对战还让人热血沸腾。从那晃动如波浪的文字验证码图形的伪装色里彷佛都能看得见程序员的头发。

图片/Flash

这是比较常见的反爬手段,将关键数据转为图片,并添加上水印,即使使用了 OCR(Optical Character Recognition,文字识别)也无法识别出来,让爬虫端获取了图片也得不到信息。早期一些电商的价格标签中经常见到这种方式。

②JavaScript 混淆技术

这是爬虫程序员遇到最多的一种反爬方式,简单来说其实就是一种障眼法,本质上还是一种加密技术。

很多网页中的数据是使用 JavaScript 程序来动态加载的,爬虫在抓取这样的网页数据时,需要了解网页是如何加载该数据的,这个过程被称为逆向工程。

为了防止被逆向工程,就用到 JavaScript 混淆技术,加 JavaScript 代码进行加密,让别人看不懂。

不过这种方式属于比较简单的反爬方式,属于爬虫工程师练级的初级阶段。

验证码

验证码是一种区分用户是计算机还是人的公共全自动程序,也是我们经常遇到的一种网站访问验证方式,主要分为以下几种:

输入式验证码:这是最最常见的,通过用户输入图片中的字母、数字、汉字等字符进行验证。

图中 CAPTCHA 的全名是(Completely Automated Public Turing test to tell Computers and Humans Apart),中文翻译为:全自动区分计算机与人类的图灵测试。

实现的方式很简单,就是问一个电脑答不出来但人类答得出来的问题。不过,现在的爬虫往往会用深度学习技术对这样的验证码进行破解,这样的图灵测试已经失效。

滑块式验证码:鉴于输入式的图形验证码的缺点,容易被破解,而且有时候人类都识别不了。

滑块验证码横空出世,这种验证码操作简便,破解难度大,很快就流行起来了。

破解滑块验证码存在两大难点:

  • 一是必须知道图形缺口在哪里,也就是得知道滑块滑到哪。
  • 二是要模仿出人类滑动的手势。

这样的验证码增加了一定的难度,也给爬虫界增加了很多乐趣,一时间大量破解滑块验证码的技术出现。

点击式的图文验证和图标选择:图文验证,是通过文字提醒用户点击图中相同字的位置进行验证。

图标选择,是给出一组图片,按要求点击其中一张或者多张。

这两种原理相似,只不过是一个给出文字,点击图片中的文字;一个给出图片,点出符合内容的图片。这两种方法的共同点就是体验差,被广为诟病。

手机验证码:对于一些重要的敏感信息访问,网站或 App 端一般会提供填写手机验证码的要求,通过手机接受网站发送的验证码来进一步访问,这种方式对于数据隐私的保护比较好。

账号密码登陆

网站可以通过账号登陆来限制爬虫的访问权限,个人在使用很多网站服务的时候一般是需要进行账号注册的,使用的时候需要通过账号密码登陆才能继续使用服务。

网站可以利用用户浏览器的 Cookie 来对用户的身份进行识别,通过保存在用户本地浏览器中加密的 Cookie 数据来进行用户访问会话的跟踪。这一般作为前面几种反爬方式的补充。

爬虫技术的发展方向

传统网络爬虫最大的应用场景是搜索引擎,普通的企业更多是做网站或应用。后来随着网络数据分析的需要,以及互联网上的舆情事件层出不穷,针对网络爬虫有了大量的需求,采集的对象主要是些新闻资讯。

近些年,由于大数据处理和数据挖掘技术的发展,数据资产价值的概念深入人心,爬虫技术得到更加广泛和深入的发展,采集对象也更丰富,高性能、并发式的技术指标也更高。

围绕网络爬虫合法性的讨论仍然存在,情况也比较复杂。目前的趋势下,许多法律问题还处于模糊地带,往往取决于具体的案例影响。

然而,可以肯定的是,只要有互联网,就会有网络爬虫。网络爬虫让体量巨大的互联网变得可以搜索,使爆炸式增长的互联网变得更加容易访问和获取,在可预见的未来,互联网爬虫技术将继续得到发展。

互联网作为人类历史最大的知识仓库,是非结构化或非标准化的。互联网上聚集了大量的文本、图片、多媒体等数据,内容虽然非常有价值,但是知识提取的难度仍然非常巨大。

语义互联网、知识共享等概念越来越普及,真正语义上的互联网将是网络爬虫的目标。

此外,物联网技术的发展,将是互联网的升级形式,也将是爬虫技术未来发展的方向。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法九——回溯算法

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 理解回溯 在我们的一生中,会遇到很多重要的岔路口。在岔路口上,每个选择都会影响我们今后的人生。有的人在每个岔路口都能做出最正确的选择&…

Python小数据池

一. id is 二. 代码块三. 小数据池四. 总结一,id,is, 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会…

第六十四期:聊聊原子变量、锁、内存屏障那点事

突然想聊聊这个话题,是因为知乎上的一个问题多次出现在了我的Timeline里:请问,多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁?可惜的是很多高票答案语焉不详,甚至有所错漏。 …

数据结构九——栈

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1栈的定义 1.1 栈的定义 栈:后进者先出,先进着后出。就像一碟盘子,如果拿走一个盘子,拿走的一定是最后放上去的那个…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第33篇]Bellcore攻击是如何攻击使用CRT的RSA的?

这是一系列博客文章中最新的一篇,该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 转载链接:https://www.cnblogs.com/zhuowangy2k/p/12245604.html

spring学习(14):Autowired的使用场景

CompactDisc类 package soundSystem;import org.springframework.stereotype.Component;Component public class CompactDisc {public CompactDisc() {super();System.out.println("compactdisc无参构造方法");}public void play(){System.out.println("正在播…

数据结构十——队列

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 队列 队列:可以想象成排队买票,先来的人先买,后到的人站在队尾。先进者先出,这就是队列。 队列的操作&#xff1a…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第34篇]描述攻击离散对数问题的baby-step/Giant-step方法

这是一系列博客文章中最新的一篇,该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 Baby-step/Giant-step是Dnaiel Shanks为解决DLP问题开发的算法。DLP问题已经是许多现代密码学的困难性基础。…

spring学习(15):required属性

CompactDisc类 package soundSystem;import org.springframework.stereotype.Component; //注解Componentpublic class CompactDisc {public CompactDisc() {super();System.out.println("compactdisc无参构造方法");}public void play(){System.out.println("…

算法十——深度优先搜索和广度优先搜索

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 搜索算法 算法是作用于数据结构之上的。深度优先搜索、广度优先搜索是作用于图这种数据结构之上的。图上的搜索算法可以理解为从一个顶点到另外一个顶点。 常用的搜…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol 52][第35篇]给针对ECDLP问题的Pollard rho,parallel Pollard rho攻击的一个粗略的描述

这是一系列博客文章中最新的一篇,该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 [1] http://www.cs.bris.ac.uk/~nigel/Crypto_Book/book.ps (pages 208 - 214) 转载连接:https…

spring学习(16):使用接口

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

交易系统高并发下的幂等性设计原则

一、介绍 幂等性就是针对同一个请求&#xff0c;不管该请求被提交了多少次&#xff0c;该请求都将被视为同一个请求&#xff0c;服务端不应该将同一个请求进行多次处理&#xff0c;以确认处理逻辑的正确性&#xff0c;针对交易性系统幂等性的设计尤为重要&#xff0c;否则由于网…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第36篇]Index Calculus算法

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 我们这篇博客继续描述一种数学攻击&#xff0c;这种数学攻击被叫做Index Calculus(IC)算法。 注意这里Index…

DS博客作业07--查找

1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会。 查找是一种跟我们生活息息相关的算法&#xff0c;最典型的例子就是搜索引擎&#xff0c;而评价一种查找算法的优劣的关键就是查找速度&#xff0c;生活中我们往往要在大量数据查找自己所需要的东西&#xff0c;如…

easyUI学习笔记二

1&#xff0e; 拖拉大小 <!DOCTYPE html> <html> <head><title>easyui学习</title><script type"text/javascript" src jquery-easyui/jquery.min.js> </script><script type"text/javascript" src jquer…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第37篇]The Number Field Sieve

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 转载链接&#xff1a;https://www.cnblogs.com/zhuowangy2k/p/12245636.html

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]40一般来说SPA和DPA的区别是什么

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 电磁(Electronmagnetic, EM)功率分析攻击被划分成两种类型的攻击&#xff0c;简单功率分析(SPA)或者差分功率…

LDAP入门

LDAP入门 首先要先理解什么是LDAP&#xff0c;当时我看了很多解释&#xff0c;也是云里雾里&#xff0c;弄不清楚。在这里给大家稍微捋一捋。首先LDAP是一种通讯协议&#xff0c;LDAP支持TCP/IP。协议就是标准&#xff0c;并且是抽象的。在这套标准下&#xff0c;AD&#xff08…

spring学习(22):分层架构

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …