1. 昨天晚上花了几个小时用Jsoup写了一个网站采集器,帮一个高中同学采集了一个工业信息门户上的芯片待售信息。网站上显示的数据多达60w+条, 我写的程序跑了7个小时只采集了一半,算是可以交差了。

    这已经是我第二次写这种采集器了。之前在做波菜网的时候,写过一个更复杂的。当时网站上线以后苦于没有原生态的内容,我就写了一个采集器从“百度身边”采集各大城市的餐馆和菜品信息,并通过google地图的接口获取餐馆的地理位置,然后转存到我们自己的网站上。

    我 必须承认,做这些事儿都是不光彩的,属于不劳而获,弄不好还得背上法律责任。但是在国内这个互联网的环境下,这种小规模的数据采集想上升到法律层面去禁 止,还是不切实际的。那么从一个网站的开发或者运营的角度,如何来防范别人的恶意采集呢?如何做到在防范的同时又不影响搜索引擎的蜘蛛的采集工作呢?

    从我个人的采集经验来看,我觉得这种防御可以从两个方面着手。

    1. 服务器端的配置。 至少可以通过防火墙来屏蔽某些ip的高频率访问,或者在web服务器设置规则来禁止关键页面被某些ip高频请求。也可以先通过防火墙设置预警机制,一旦发 现异常立即通知web服务器采取屏蔽措施。不管是专业的采集器还是像我的这种纯代码级别的采集,最基本的原理就是模拟用户浏览网站行为,发送http请求 到网站的server,然后解析返回的结果。出于效率起见这种采集行为都有几个共同的特点。一是发出请求的ip地址比较固定,二是请求的频率比较稳定,三 是访问的页面也比较固定。防火墙的设置可以基于前面两个特征,web服务器的过滤规则可以基于后面两个特征。当然这些措施只是从物理层面的防御,放不了真 正的高手。我在我的采集器里面实现的多线程采集,就会把采集频率用随机时间来控制,也就是发送采集请求的频率是随机的,有可能是3秒钟一次,有可能是2秒 钟一次。另外如果我是黑客,我可以发动多个ip的肉机来发送请求。总之一句话,服务器上的防御,防得了君子,防不了高级的小人,但是有总比没有好。
    2. 代码级别的防御。采集器可以模拟浏览器大部分的行为,但是肯定有模仿不到的地方。比如说带参数的ajax请求。从我的经验来看,你至少可以在通过以下三种方式来优化你的代码,以防止恶意采集。
      1>  关键信息通过ajax请求来获取,最好是需要带有临时token作为参数的请求。网站在发布的时候需要做javascript代码压缩和混淆,这样程序人 员就很难通过阅读代码或者捕获请求来建立模拟采集。这里说的关键信息,是指那种对业界同行来说比较重要的信息,比如说价格等。除了这些关键信息以为的信息 就最好不要用ajax请求来显示了,那样不利于SEO优化,搜索引擎的蜘蛛也不能模拟如此复杂ajax请求。另外如果有分页,一定要用ajax请求来分 页。具体例子可以看看花瓣网的首页。至于通过表单请求来获取数据,有些采集器已经能模拟带session或者cookie信息的表单请求了,至少Jsoup是可以做到的。
      2>  关键信息通过图片来显示。这种是技术含量比较低的防御了,唯一的好处是有利于SEO优化,因为图片通过alt来携带更加丰富的信息。京东的商品价格就是用 图片来显示的,采集器采集到的价格信息需要做OCR文字识别,如果在图片的格式做些手脚或者加入混淆信息,那别人采集过去的信息准确度就会大大降低。另外 通过图片来显示的另外一个好处就是可以把图片服务器独立出来,然后通过防火墙设置来只允许来自已知域名的请求。
      3>  网页代码结构化混淆。简单的说就是关键信息的显示不是规律性的。这种做法对网站开发人员要求比较高。毕竟html是一种结构化的语言,想要通过不规律的 html标签勾勒出美观的结构化界面是比较难的,但不是不可能。比如说同一张页面的上商品价格列表,你可以随机用div,li,span等这些文字标签来 封装,然后通过定制css来达到规范布局。不同的页面(分页)上价格列表,最顶层的div的id或者class不一样,而且跟其他页面的的id无规律可 循。这样做可以让采集程序很难发掘到采集的规律,那么采集的难度就大大加大了,即使能采集,效率也会相当低下。这种做法基本上不影响SEO优化。

    不过话说回来,不管你采取哪种防御措施,想防住真正的高手是不可能的,只要能防住98%的人就可以了。剩下的那2%,你如果发现你的数据被采集了,就采取法律措施吧。前段时间大众点评起诉“食神摇一摇”抄袭数据,就是一个很好的例子。

如何防止网站关键数据被人恶意采集相关推荐

  1. php 定时采集数据,懒人一键采集(采集+推送+定时)

    可能是 ZBlog 最简单快捷的采集插件,说出来你可能不信 > 对该插件有任何疑问.反馈,可加作者 QQ:1365975459 进行交流 > 该插件需要修改一处 PHP 配置 教程参考  ...

  2. 全球最大同性交友网站GitHub发布了年度开发者报告,提到了这些关键数据

    编辑 | 雨多田光 10 月 10-12 日,GitHub Universe 大会在旧金山召开,GitHub 官网也发布了 2017 年年度数据报告.今年的数据让人眼前一亮,我们将目光聚焦在其中几个点 ...

  3. 网站优化数据关键词统计分析优化技巧

    网站优化有哪些基本技巧是我们需要掌握的,除了基本的SEO理念网站数据统计和分析也是比较重要的环节,通过对我没网站各项数据的汇总分析,我们可以及时对网站的运行情况,流量数据和关键词效果等有一个直观的感受 ...

  4. java 开发用到网络爬虫,抓取汽车之家网站全部数据经历

    经历了两个礼拜的折腾,某某知名网站的数据终于到手了.犯罪没被发现这种心情感觉很爽. 说一下我的犯罪经历,之前公司总是抓取某某网站数据,可能是被发现了.某某网站改变了策略.通过各种技术终止了我们的行为, ...

  5. 基于机器学习和背景流量数据的加密恶意流量检测

    文章目录 1 加密流量现状 1.1 加密流量检测的必要性 1.2 加密恶意流量的检测方法 2 加密流量特征分析 2.1 可观察的数据元统计特征 2.1.1 传统流数据 2.1.2 字节分布 2.1.3 ...

  6. LAMP 关键数据集锦技术选项参考

    LAMP 关键数据集锦技术选项参考 源自日积月累自己的其他人的经验总结 负载均衡 LVS 工作在四层,内核态,性能极高,有VIP功能,配合 keepalived 做有效的 心跳检查和负载均衡安装配置 ...

  7. 关键数据保险箱,AD RMS服务器部署指南

    关键数据的保险箱,AD RMS服务器部署指南<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  8. 网站分析数据收集方式详解

    回顾网站数据分析历史,从"您是第***位来访用户"到现在百家齐放的专业工具提供商,网站分析已经逐渐发展衍化成一门科学.但面对形态各异的分析数据,很多人仍然困惑于数据的来源,了解数据 ...

  9. 金融数据分析之pdfplumber提取年报PDF关键数据(其他PDF数据通用)

    目录 一.前言 二.难点 三.提取难点解决思路 四.源代码 一.前言 小编最近遇到需求了: <1>从PDF提取出关键数据: <2>将关键数据整理到对应的Excel文件: < ...

最新文章

  1. 德鲁克的17条思想精髓,读懂管理的本质
  2. sougou ubuntu 优麒麟_优麒麟(Ubuntu Kylin)17.04 正式版及银河麒麟社区版发布
  3. speech_to_text_demo powered by IBM!
  4. 2018.12.15
  5. android 打开支付宝扫码页_Chrome 85正式版发布:新增标签页分组功,网页多了也不乱...
  6. 网站建设中 模板_网站建设之模板网站的缺点
  7. C# Winform 窗体美化(六、双层窗体)
  8. wsld2java axis_Weblogic+axis2安装
  9. webpack中hash、chunkhash、contenthash
  10. [自动调参]深度学习模型的超参数自动化调优详解
  11. 谷歌浏览器Chrome developer tool详细介绍
  12. js 解析php arraylist,使用JSON将ArrayList从Android发送到PHP脚本
  13. jQuery瀑布流插件 Masonry
  14. autojs多分辨率找透明图
  15. 2.4G天线在PCB板上的设计
  16. UDS协议-代码完整性测试
  17. Bandicam录屏
  18. Go语言实用用法大全
  19. linux下c 开发 腾讯视频播放器,调用腾讯视频播放器API代码
  20. Windows 10 微信双开或多开【PC端】

热门文章

  1. STLINK下载程序出现cannot access target. shutting down debug session问题解决的一般步骤
  2. 华为新机预装鸿蒙,华为新机来了!预装鸿蒙OS,搭载麒麟9000
  3. 前端非框架类知识点汇总
  4. 遇见未来 | 对话朱贤文: PostgreSQL是一匹即将发力的黑马
  5. iOS 判断是否为iPhoneX以上设备
  6. JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API
  7. symlink(): Protocol error
  8. Office365离线安装包
  9. Crypto one-time-pad
  10. C++中 #if #endif 和#ifdef #endif的用法