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

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

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

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

原文地址:https://www.cnblogs.com/testfan2019/p/11929158.html

时间: 2024-07-30 12:41:32

震惊!编写“爬虫”,怎么“面向监狱编程”了?的相关文章

最近程序员频繁被抓,如何避免面向监狱编程!?

最近,有关程序员因为参与某些项目开发导致被起诉,甚至被判刑的事件发生的比较多: 某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓. 某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程序员被抓. 某P2P公司暴雷,老板跑路,程序员被抓. 中科大博士卖"外挂"非法牟利300多万,被警方逮捕. 那么,作为一个程序员,如何避免这些坑呢?怎样尽可能的保护自己呢? 本文就从爬虫.赌博网站.P2P以及外挂等几个方向来介绍下,作为程序员如何避免面向监狱编程! 由于作者并非专

Spring面向切面编程

  1.面向切面编程(AOP)的概念:把项目中需要在多处用到的功能,比如日志.安全和事物等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用.   2.术语解释:        横切关注点:分布应用于多处的功能        切面:横切关注点可以被模块化为一个类,这个类被称为一个切面        通知(advice):切面要完成的工作.Spring的通知有5种类型:before.after.after-returning.after-throwing和around这五种类型.    

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

Spring框架——AOP(面向切面编程)详解

 1 AOP概述 ●AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充. ●AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点. ●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类.这样一来横切关注点就被模块化到特殊的类里--这样的类我们通常称之为"切面".

面向切面编程

面向切面编程 .Net的面向切面编程 .Net的服务端应用AOP很常见,在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子,我们可以把一个服务方法"切"为很多面,日志面.验证面.请求方式处理.接口业务实现等多个面,有一些面可以使用过滤器特性(FilterAttribute)进行编写,然后很方便和打上特性即可,对于一般的工程师,只需要专注实现接口业务实现. 在流行SOAP的年代,很少需要一个强悍的Client,而今天restful时代,.net也出了一个

初识Aop(面向切面编程)

AOP面向方面/面向切面编程 AOP将分散在系统中的功能块放到一个地方- 切面 可以声明式的定义何时何地应用这些功能,而不是在需要新功能的地方修改代码 好处每个业务逻辑放在一个地方,不是分散到代码各个角落.业务模块只包含核心功能,辅助功能转到切面中,使其更加清晰.关注的是共同处理.通过spring配置把某个作用应用到多个点上.提高灵活性 重要术语切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象.并且多次使用连接点(Joinpoint):应用程序执行过程中插入

Java实战之03Spring-03Spring的核心之AOP(Aspect Oriented Programming 面向切面编程)

三.Spring的核心之AOP(Aspect Oriented Programming 面向切面编程) 1.AOP概念及原理 1.1.什么是AOP OOP:Object Oriented Programming面向对象编程 AOP:Aspect Oriented Programming面向切面编程 1.2.代理 充分理解:间接 主要作用:拦截被代理对象执行的方法,同时对方法进行增强. 1.2.1.静态代理 特点:代理类是一个真实存在的类.装饰者模式就是静态代理的一种体现形式. 1.2.2.动态代

简单理解之面向切面编程(AOP)

在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录.事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码.当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示.方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋.这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜". 如果能把图6-4中众多方法中的所有共有代

面向切面编程(AOP)

        AOP.OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想: OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分.对于"雇员"这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个"Employee"类,并将"雇员"相关的属性和行为封装其中. 而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中