实际上是反反爬的技术,我对 JS 代码了解不多,看得头晕,有人会么?教教我,或者有教程之类的也行.
针对的机制的 crawlerInfo 加密函数,我找来找去,越来越乱,特此求助!
实际上是反反爬的技术,我对 JS 代码了解不多,看得头晕,有人会么?教教我,或者有教程之类的也行.
针对的机制的 crawlerInfo 加密函数,我找来找去,越来越乱,特此求助!
我们很熟悉爬虫,爬虫存在互联网的各个角落,爬虫有好处也有坏处,今天我们不讲如何进行爬取,我们来说一说和爬虫共同诞生的反爬虫技术。爬虫技术造成的大量 IP 访问网站侵占带宽资源、以及用户隐私和知识产权等危害,很多互联网企业都会花大力气进行“反爬虫”。相比于爬虫技术,反爬虫其实更复杂。在 90 年代开始有搜索引擎网站利用爬虫技术抓取网站时,一些搜索引擎从业者和网站站长通过邮件讨论定下了一项“君子协议”—— robots.txt。即网站有权规定网站中哪些内容可以被爬虫抓取,哪些内容不可以被爬虫抓取。这样既可以保护隐私和敏感信息,又可以被搜索引擎收录、增加流量。在远古时期,互联网还是一片乐土,大多数从业者都会默守这一协定,毕竟那时候信息和数据都没什么油水可捞。但很快互联网上开始充斥着商品信息、机票价格、个人隐私等等,在利益的诱惑下,自然有些人会开始违法爬虫协议了。当君子协议不再有效时,我们就采取技术的手段来反爬虫,今天我们主要说一说有那些技术方法来应对爬虫进行反爬。
**01
**
通过请求头来控制访问
不管是浏览器还是爬虫程序,在访问目标源网站时都会带上一个头文件:User-Agent
**反爬策略:**我们的网站可以设定 User-Agent 白名单,属于正常的范围才能访问
**缺点:**爬虫程序很容易伪造头部进行请求,只能拦截一部分新手爬虫。
**02
**
ip 限制
**反爬策略:**让一个固定的 ip 在短时间,不能对接口进行频繁访问。
**缺点:**爬虫程序可以通过 ip 代理池切换 ip 进行访问,但对爬虫者来讲需要一定成本,对于反爬虫来讲通过这种免费或付费的 ip 代理可以绕过检测。
*代理ip池实现的简单思路*@return*/public static Sting getProxy(){String [] proxy={“http://118.245.23.2:80”,“http://118.145.23.2:8118”,“http://117.245.23.2:88”,“http://116.245.23.2:80”};return proxy [new Random().nextInt(proxy.length)];}
**03
**
验证码验证
验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于 计算机无法解答 CAPTCHA 的问题,所以回答出问题的用户就可以被认为是人类。
**缺点:**影响正常的用户体验操作,验证码越复杂,网站体验感越差
**04
**
session 访问限制
**反爬措施:**后台统计登录用户的操作,比如短时间的点击事件,请求数据事件,与正常值比对,用于区分用户是否处理异常状态,如果是,则限制登录用户操作权限。
**缺点:**需要增加数据埋点功能,阈值设置不好,容易误杀。
**05
**
数据加密
**反爬措施:**前端可以通过对查询参数、user-agent、验证码、cookie 等前端数据进行加密生成一串加密指令,将加密指令作为参数,再进行服务器数据请求。该加密参数为空或者错误,服务器都不对请求进行响应;后端可以在服务器端同样有一段加密逻辑,生成一串编码,与请求的编码进行匹配,匹配通过则会返回数据。
**缺点:**加密算法写在 JS 里,爬虫程序经过一系列分析还是可以进行破解。
**06
**
但是目前面对这些反爬虫技术,如果我们为了获取数据又必须用爬虫技术,那么面对这种情况应该如何解决?
首先我先介绍Google Chrome的开发者工具的打开方式,我下面的介绍都是在Google Chrome里进行,所以这个开发者工具的使用比较重要。 首先打开Google Chrome,对于Mac而言Cmd+Opt+I Windows而言Ctrl+Shift+I
以此我们可以打开开发者工具
我们就以知乎为例进行解释
打开开发者工具之后,根据上图的步骤我们可以找到需要使用的网址。
然后在 Atom 里可以输入以下代码,从而形成一个 python 的文件。
从而可以将数据爬取出来
etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。
有点意思就行了
Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。
我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。
Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。
ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
一些有用的避坑指南。
宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
你听到信仰的声音了么?
CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。
面试造航母,上班拧螺丝。多面试,少加班。
Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。
Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用 。
Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。
LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。
希望你我能在旅途中找到人生的下一站。
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!
Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于