【问题】网络爬虫有做过吗?你是怎样做的?你是怎样判断哪些可以爬那些不可以爬?

当初面试一家初创型公司的时候面试官问了我这个问题,当时我是有些愕然的。

我心想:“他想干嘛?要我做爬虫吗?现在做爬虫风险很大的哦”

我:“是,我做过类似的工作,但爬的都是公开数据不存在法律问题”

面试官:“那你怎么知道你爬取的数据不存在法律风险?”

我:“呃…因为我们做这项目之前有咨询过公司的法律团队,也做过相关调研,代码已通过了第三方的代码审计,因此不存在数据问题”

之后面试官就沉默了。

说实在的,当时我不知道问这问题的用意是什么(或许是想套个解决方案又或者是想考察我是怎样解决这个问题的),不过我想他应该也没有料到我会这样圆过去了。时隔这么多年了,我想我现在应该可以重新回答一下这个问题。

首先,我要怎么做?

现在一说到要做网络爬虫立刻就想到用 Python 做,毕竟 Python 关于这方面的库实在是太好用了。但既然我是以“一个不务正业的Java从业者”自居,那么我还是基于 Java 来简单说说吧。

这第一步肯定是规划 IP 池用于代理输出(大坑,要可持续找可用的 IP 需要配合其他工具),接着就是多线程的动态控制(大坑,太过敏感不好详说),再接着就是 PhantomJS(HtmlUtil) + Selenium 的无浏览器页面结构提取(大坑,要做调整来应对页面异步渲染场景),再来就是通过 Jsoup 对页面数据进行解析,之后就是数据清洗(大坑,数据结构自适应)、入库 … 我想这应该能够满足基础网络爬虫需要。

那么最关键的来了,哪些数据可以爬?哪些不可以爬?

要知道答案肯定是要参考一下“前车之鉴”,要找到官方的裁判书我会选择中国裁判文书网(https://wenshu.court.gov.cn/),只要注册一个账号即可免费查询。

在经过大量的资料搜集和分析后得出以下结论:

行为 总结
网络爬虫违法行为包括 1. 爬取他人网站数据用于商业目的获利,如用于自身APP提供免费看小说服务、破解对方网站验证码获取数据用于自己网站、获取数据销售获利等。这些都属于侵犯著作权和数据归属权的行为;
2. 采取非法手段获取数据,如利用技术破解他人网站的防爬机制或者通过抓包、反编译等技术手段获取网站接口数据。这些属于违法获取计算机信息系统数据的行为;
3. 爬取的数据量较大或对他人网站功能造成严重干扰,如大量爬取个人信息或爬取流量过大导致网站瘫痪。这些属于严重超过合理使用限度,应承担相应法律责任;
4. 提供专门用于非法侵入计算机信息系统的程序或工具,如提供绕过目标网站反爬措施的爬虫程序,属于危害计算机信息系统安全的行为;
5. 未采取保密措施导致商业秘密泄露,如挖掘隐藏在网站代码中的商业数据,属于违反商业秘密保护的行为;
要遵守规则 1. 要爬就爬完全公开的信息,不破坏或绕过任何防爬机制;
2. 爬取的数据仅用于合法的学术科研目的,不要用于商业用途;
3. 爬取时不能给目标服务器带来过大负载,需要限制爬取频率;
4. 要遵守 robots 协议,尊重网站所有者的爬取规则;
5. 合理使用爬取所得的数据,不得超出使用目的范围;
坚决不可以 1. 未经授权擅自用于商业用途;
2. 破坏或绕过网站的反爬虫技术措施;
3. 爬取个人隐私、商业秘密等敏感数据;
4. 提供侵入或破坏计算机信息系统的程序或工具;
5. 频繁爬取数据,给服务器带来过重负载;
6. 未采取保密措施导致数据泄露;

那么站在技术角度我们要遵守以下 7 点:

  1. 识别和遵守 robots 协议,根据爬取对象的要求合理设置爬取频率、路径等;
  2. 不使用破解验证码、模拟登录等绕过防爬技术的手段,那属于非法进入计算机信息系统;
  3. 不反编译软件、监控网络数据流量等方式获取接口数据,属于非法获取数据;
  4. 不提供专门用于破解防爬、非法进入计算机信息系统的工具或服务;
  5. 坚决不爬取个人隐私信息、商业机密、国防建设、涉及国家事务和尖端科学技术领域的数据;
  6. 使用分布式、异步等技术控制爬取频率,避免对目标服务器造成过载;
  7. 在收到网站禁止爬取通知时立即停止;

基本上就是以上这些了,再提醒大家一句,不要做触及法律的底线和危害国家安全的事情。建议在没有搞清楚之前不要轻易触碰网络爬虫相关的业务以免招来横祸。真遇上事儿,还是要咨询专业的法律团队的意见,不要自己瞎琢磨。

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/132504209