震惊!编写“爬虫”,怎么“面向监狱编程”了?

 2019年9月以来,不少因为非法使用“爬虫”技术,而使公司面临诉讼,程序猿被警察带走的新闻震惊了IT圈的小伙伴们!

我只是个写爬虫的,跟我有什么关系?

许多程序员都有这样的想法,技术是无罪的,我只是个打工的程序员,公司干违法的业务,跟我没关系。。。只能说,程序猿们真是图样图森破了。

看到那么多爬虫导致公司触犯法律的新闻,有人开玩笑说,编写爬虫程序,就是“面向监狱编程”。

看个案例:

抓取用户社交数据,尤其是用户隐私相关。

(图片文字来自新浪网)

其实,“爬虫”只是一种技术,没有那么可怕如果使用技术来做非法的事情,自然就会有警察叔叔上门了。

今天老司机给大家讲一下爬虫的几个原理,以及怎么安全无忧地使用爬虫。

首先,网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

其次,网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:

• 通用网络爬虫(General Purpose Web Crawler)

• 聚焦网络爬虫(Focused Web Crawler)

• 增量式网络爬虫(Incremental Web Crawler)

• 深层网络爬虫(Deep Web Crawler)

实际的网络爬虫系统通常是几种爬虫技术相结合实现的。由于商业原因,网络爬虫的技术细节很少公布出来。

所以,可以很安全地得出结论,普通编程爱好者,使用Python、JAVA自己练习代码,是无风险的。

再次,网络爬虫抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制定的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法又是紧密相关的。

仅仅就聚焦爬虫来说,对抓取目标的描述可分为三种:

• 基于目标网页特征

• 基于目标数据模式

• 基于领域概念

基于目标网页特征的爬虫,所抓取、存储并索引的对象一般为网站或网页;

基于目标数据模式的爬虫,针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式;

基于领域概念的爬虫,是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度;

然后,爬虫算法,也是核心部分。

爬虫算法,即网页的抓取策略,可以分为深度优先、广度优先和最佳优先三种。

深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。

爬虫找到了内容,还要进行网页分析。

网页分析算法可以归纳为基于网络拓扑、基于网页内容和基于用户访问行为三种类型。

以上的算法,被称为网络抓取或者爬虫爬行。

很多站点,尤其是搜索引擎,都使用爬虫提供最新的数据,它主要用于提供它访问过页面的一个副本,然后,搜索引擎就可以对得到的页面进行索引,以提供快速的访问。

同时爬虫也可以在web上用来自动执行一些任务,例如检查链接,确认html代码;也可以用来抓取网页上某种特定类型信息。

看到这里,相信小伙伴们已经明白了“爬虫技术”本身就是一把双刃剑了吧?

介绍完原理,老司机告诉大家怎么安全使用爬虫技术,避免“面向监狱编程”。

道路千万条,安全第一条,爬虫不规范,码农两行泪。

安全使用爬虫技术的规范很多,各位小伙伴至少要记住一条:平衡礼貌策略!

爬虫相比于人,可以有更快的检索速度和更深的层次,所以,它们可能使一个站点瘫痪。

不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。

爬虫的使用对很多工作都是很有用的,但是对一般的网站,滥用爬虫是有危害的,包括但不仅限于:

网络资源:在很长一段时间,爬虫使用相当的带宽高度并行地工作;

服务器超载:尤其是对给定服务器的访问过高时;

质量糟糕的爬虫,可能导致服务器或者路由器瘫痪,或者会尝试下载自己无法处理的页面。

对这些问题的一个部分解决方法是漫游器排除协议(Robots exclusion protocol),也被称为robots.txt议定书。

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络爬虫:此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

参考robots.txt去爬取数据,再设置一下间歇时间,不会有人在意的。

比如大名鼎鼎的淘宝,就有robots.txt。可以访问一下:

https://www.taobao.com/robots.txt

作为资深IT从业人员,本老司机给大家推荐几个开源的、安全的、放心使用的、爬虫项目供大家学习:

• DataparkSearch是一个在GNU GPL许可下发布的爬虫搜索引擎;

• ICDL Crawler是一个用C++编写,跨平台的网络爬虫。它仅仅使用空闲的CPU资源,在ICDL标准上抓取整个站点;

• JSpider是一个在GPL许可下发行的,JAVA编写的,高度可配置的,可定制的网络爬虫引擎;

• YaCy是一个基于P2P网络的免费的分布式搜索引擎(在GPL许可下发行)

最后,必须要说的是,作为一个技术人员,大家需要有些基本的判断和法律意识。

“不能因为老板要求什么就不加思考去干什么!”,尤其是涉及到用户隐私等数据。

作  者:Testfan Arthur

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

posted @ 2019-11-25 17:25  码同学软件测试  阅读(369)  评论(0编辑  收藏  举报