互联网诞生之初,是为了让人们更容易的分享数据、交流通信。互联网是桥梁,链接了世界各地的人们。网站的点击、浏览都是人为的,与你聊天的也是活生生的人。然而,随着技术的发展,人们对数据的渴望,出现了各类网络机器人,这个时候,你不知道屏幕那端跟你聊天的是一我的仍是一条狗,你也不知道你网站的浏览量是人点击出来的,仍是机器爬出来的。python
表面上看,互联网上是各类各样的人;暗地里,已经布满了形形色色的网络爬虫。web
1、搜索引擎时代的网络爬虫算法
关于网络爬虫的概念,咱们先来瞅瞅维基百科(Wikipedia)上面的定义:数据库
网络爬虫(英语:web crawler),也叫网上蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的通常为编纂网络索引。django
这里提到的编纂网络索引,就是搜索引擎干的事情。咱们对搜索引擎并不陌生,Google、百度等搜索引擎可能天天都在帮咱们快速得到信息。可能小猿们要问,搜索引擎的工做过程是怎样的呢?编程
首先,就是有网络爬虫不断抓取各个网站的网页,存放到搜索引擎的数据库; 接着,索引程序读取数据库的网页进行清理,创建倒排索引; 最后,搜索程序接收用户的查询关键词,去索引里面找到相关内容,并经过必定的排序算法(Pagerank等)把最相关最好的结果排在最前面呈现给用户。浏览器
看上去简简单单的三个部分,却构成了强大复杂的搜索引擎系统。而网络爬虫是其中最基础也很重要的一部分,它决定着搜索引擎数据的完整性和丰富性。咱们也看到网络爬虫的主要做用是获取数据。服务器
由此简单地说,网络爬虫就是获取互联网公开数据的自动化工具。网络
这里要强调一下,网络爬虫爬取的是互联网上的公开数据,而不是经过特殊技术非法入侵到网站服务器获取的非公开数据。并发
可能你要问,什么是“公开数据”呢?简而言之,就是网站上公开让用户浏览、获取的数据。
虽然数据是公开的,可是当某人或机构(如,搜索引擎)大量收集这些数据并所以获利时,也会让数据生产方——网站很不爽,由此而产生法律纠纷。好比,早些年Google所以而惹上官司。
网站们看着搜索引擎由于搜索引擎抓取本身的内容而获利不爽,但也由于搜索引擎带来的流量而高兴不已,因而就出现了网站主动进行搜索引擎优化(SEO, Search Engine Optimization),也就是告诉搜索引擎,我这里的内容好,快来抓取吧!
搜索引擎和网站的博弈,催生了一个君子协议: robots.txt。网站在本身的网站上放上这个文件,告诉爬虫哪些内容能够抓,哪些内容不能够抓;搜索引擎读取网站的robots.txt来知道本身的抓取范围,同时也在访问网站时经过User-Agent来向网站代表本身的身份(这种代表也是君子协议,技术上很容易假扮他人),好比,Google的爬虫叫作Googlebot,百度的爬虫叫作Baiduspider。这样,两者和平共处,互惠互利。
2、大数据时代的网络爬虫
时代在发展,数据变得愈来愈重要,“大数据”已经成为各行各业讨论的话题,人们对数据的渴望也变成贪婪,数据也就成了“石油”,爬虫也就成了“钻井机”。
为了获取石油,人们使用钻井机;为了获取数据,人们使用爬虫。为了得到数据,人们把互联网钻的是“千疮百孔”。哈哈,这里有些夸张。但人们对数据的获取,已经打破的君子协定,和网站们玩起了猫捉老鼠的游戏,展开了道高一尺魔高一丈的较量。
为何说是较量呢?由于大量爬虫的行为会给网站带来网络带宽、服务器计算力等方面很大的压力,却几乎不带来任何利益。为了下降这种毫无利益的压力和避免本身的数据被他人集中收集,网站确定要经过技术手段来限制爬虫;另外一方面,爬虫为了获取石油般的数据,就千方百计来突破这种限制。
对于这种较量的理解,仍是看活生生的例子来得更透彻。
你有没有花几十块钱让某个软件帮你抢火车票? 攻: 抢票爬虫会不断访问12306来得到火车票座位数据,并进而购买火车票; 防: 12306网站出了变态的认证码,人都常常识别错误。 各类秒杀让你很受伤! 攻: 研究网站的秒杀机制,提早写好爬虫,秒杀时刻,人快不过机器; 防: 有些秒杀的宣传做用很大就懒得防;有些秒杀机制复杂到你很难写出对应的爬虫;有些秒杀成功被发现做弊也会被取消。 爬虫变得愈来愈多,愈来愈肆无忌惮,网站也不得不使用各类技术手段来禁止或限制爬虫。这些手段大体包括:
使用帐户保护数据,数据仅对登陆用户可见; 数据屡次异步加载; 限制IP访问频率,甚至封锁IP; 输入验证码以得到访问权限; 数据在服务器端加密,浏览器端解密; …… 而这些手段也是爬虫在技术实现中要解决和突破的问题。
3、网络爬虫的自我约束
看完上面“猫捉老鼠”的游戏的描述,小猿们不由要问,网站和爬虫这种对抗较量会不会引发法律问题? 这是一个很好的问题,也是值得每一个爬虫开发者思考的问题。
爬虫做为一种技术自己可能无所谓善恶,可是使用它的人就有善恶之分。如何使用爬虫,爬取的数据如何使用,均可能产生潜在的法律问题。做为技术开发的小猿们,都应该思考这个问题。不管何种目的,网络爬虫都不能突破法律的底线,同时也有遵照必定的准则:
遵循robots.txt协议; 避免短期高并发访问目标网站,避免干扰目标网站的正常运行; 不要抓取我的信息,好比手机通信录等; 使用抓来的数据注意隐私保护,合法合规。
若是你依然在编程的世界里迷茫,不知道本身的将来规划,能够加入咱们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验! 本身是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、人工智能、数据挖掘等,零基础到项目实战的资料都有整理。 送给每一位python的小伙伴!分享一些学习的方法和须要注意的小细节,这里是python学习者汇集地
点击:python技术分享