科普:淘宝网的反爬虫变迁史

1、什么是网络爬虫?

111.jpg
其实 “网络爬虫”这个概念非常简单。首先回想一下人类是怎么上网的?第一步是打开浏览器,输入网址,点击各种链接,获取各种信息,然后通过一个链接又跳转到另一个链接?本质上来说网络爬虫跟人类上网的流程是一回事,不同的只是主体从人变成了计算机程序。爬虫就是这样一种程序,它通过访问各种网站的链接,读取页面的信息,然后又顺着链接跳转到别的地方,继续获取信息。


2、网络爬虫有什么用?

222.jpg

网络爬虫最早是运用在搜索引擎上的,例如百度谷歌。当我们向搜索引擎输入一个关键字后,引擎会反馈会一大堆相关的结果给我们,那么这些结果是怎么来的?这就是爬虫的功劳,搜索引擎通过释放规模庞大的爬虫程序,目的就是要尽可能地将整个网络的各种信息索取回来拓展他们的数据库内容储备。

要知道在没有爬虫之前,早期的搜索引擎例如Yahoo之类,是通过所谓 “收录” 方式扩充其数据库内容的,即作为网站首先要向Yahoo发出申请,将网站的主题浓缩成几个关键字。只有当Yahoo收录了你这条记录后,才会将你的网站与这个关键字挂上号,当用户搜索这个关键字的时候,你的网站才能呈现给搜索者。

收录模式跟爬虫的区别?一个是被动接受,另一个是主动出击,效率当然不可同日而语。Google的崛起,与他早年开发的高效率爬虫程序有直接关系。

除了像搜索引擎公司这种大规模的爬虫,随着大数据的兴起,在做数据挖掘的时候也需要用到爬虫,否则所谓大数据分析就是巧妇难为无米之炊。


3、爬与反爬

333.jpg

作为网站运营方而言,他们并不排斥搜索引擎的爬虫,因为这可以提高网站被访问的权重。但对于那些仅仅出于数据采集的爬虫,就不是那么受欢迎了。首先增加了服务器负担,其次,大公司之间为了获取竞争对手的数据,也会派出爬虫大军进行挖掘,爬与反爬都是相对的,一个公司为了获取友商的数据,会有专门的爬虫部门,同时为了自己的数据不被别人爬取,又会成立专门的反爬部门。


4、 爬虫的实现方式
  • 第一种是通过直接发送http request方式,这种方式跟浏览器无关,程序只需仿造一个http数据包发送到目标服务器,然后就能接收从服务器返回的HTML网页代码,最后通过拆解HTML源代码的方式获取其中有用的内容。 因为没有浏览器的介入,数据是直来直往的,无需渲染或脚本解析,所以这种方法效率很高。 缺点是反爬能力差,在没有破译好网站方的UA混淆代码前,比较难以绕开验证码这道门槛。

  • 第二种方式是模拟人类上网的行为来实现,有这样一种浏览器,它接受代码的控制,比如说你向它发送“get taobao.com”指令,它就会打开淘宝网站。其实说白了,这种方式像极了用 “按键精灵” 来模拟上网,我们姑且把它称为按键精灵模式吧。 因为数据的发送和接收,都需要浏览器介入,所以这种方法效率不行。优点是反爬能力较强,网站比较难判断出访问者到底是真人还是程序。这种方式如果走到极端,就是利用真人去操作,那么也没反爬什么事了,许多所谓的“打码网站”就是利用真人去识别验证码以此牟利。

  • 第三种方式无论从原理还是实现来说都不能称之为“爬虫”,但它确实也能起到爬虫的作用,姑且把这种方式也算进来吧。一些网站因为业务需要,会直接把内容开放出来,这就是所谓的第三方API,像阿里开放平台或者一些能提供天气信息的网站就是如此。 通过这种方式交换的数据很纯粹,因此效率极高。另外还不需要担心反爬这个问题。 缺点显而易见,并不是每个网站都提供API,此外,即使提供的,很多也需要付费。


5、淘宝网的反爬变迁

淘宝网早期截图

淘宝网作为一个在线电商的寡头,他家的数据非常吸引人,大到某类商品的整体走势,小到一个订单的具体内容,都是爬虫的目标。相应的,淘宝网的反爬手段也是逐年在进化的。

注意:本文所讨论的反爬,主要是针对那种需要登录才能进行操作的爬虫,对于那些仅仅是为了爬取公开内容而不需要登录的爬虫,不在讨论范围。

  • 上古蛮荒时期,我不确定他们有没有专门的反爬部门,但在那时候可以通过定制一个包含了账户和密码的http数据包,然后硬塞给服务器,就能成功登录,非常简单。

  • 大概到了2010年代,随着验证码和滑块的出现,这种野蛮的方法就失灵了。因为在我们仿造的http数据包中,光有账户密码还不行,必须知道验证码的内容,或者用鼠标滑一下滑块到指定位置。这二者目的是一样的:通过一个即时生成的附加内容(验证码或滑块),然后将这个附加内容以一个参数方式包裹进http数据包再发送到服务器端,服务器才认为这个请求是有效的。要命的是,通过直接发送http数据包的直连方式,由于没有浏览器的支持,连验证码长什么样都不知道,可以说验证码的诞生,宣告了这种直连型爬虫的暂时失效。

  • 为什么说是“暂时”失效呢,因为后来直连型爬虫又找到一种新的方法,那就是“半自动化”登录,即第一次登录的时候,由人类完成,正常输入账号密码,包括验证码滑块之类,登录成功后,记录下当前Cookies,然后将这些已经登录成功的Cookies包裹进一个新建的http数据包里再将这个数据包发送给服务器,因为在截取这个Cookies的时候,是验证码已经通过了之后的,这样一来,服务器便只能认为此后的所有请求都是合法请求了。

  • 大概在2017还是2018年前后,阿里搞了一个名叫 “霸下-七层流量清洗” 的系统,从那时候起淘宝网在它的Cookies里增加了几个随时在变化的字段,每一次请求这些字段都会发生改变,换句话说现在的淘宝网Cookies是一个“动态”Cookies,这套系统有一个UA算法,根据鼠标的轨迹,根据点击的X,Y坐标等等,将这些客观数据作为初始变量,然后再通过一个算法将这些变量整合为一个token,最后提交到服务器。由于这一系列操作终究还是要靠JS来完成,而对于用户来说是JS透明的存在,因此网站方就会通过各种方法来混淆这些关键的JS代码,当然,对于爬虫高手来说,他们可以分析出到底是哪些JS代码块在起作用,对于那些能力弱的爬虫来说就只能望洋兴叹了。

  • 那么路是不是就给堵死了呢,答案是否定的。即使没有能力破译淘宝的UA代码,也还可以退而求其次利用 “按键精灵” 类爬虫去完成。比如说Selenium这一类无头浏览器,所谓无头就是指没有图形端的浏览器,无头浏览器效率会比普通图形化浏览器效率高一些,但效率终究比不过http直接请求,所谓鱼与熊掌不可兼得,在技术能力不济的情况下,通过浏览器模拟获取数据也不失为一种简单可行的方法。

  • 悲催的是,其实现在淘宝网已经能够识别Selenium的虚拟鼠标轨迹了,但好在淘宝对Win32 API这样的底层鼠标模拟,还是识别不了。我们可以通过“有头浏览器” + 系统级API鼠标模拟这样的方式去操作。很显然,“无头”这条路不好走了之后,效率就又下降了一层。但无论如何路还是堵不死的,因为即使我们将技术细节放一边,最要命的是他们不得不考虑误伤这个问题,这是一个两难的选择:

    • 宽松的规则,纵容了爬虫;
    • 严苛的规则,又可能对真实的人类客户造成误伤,降低用户体验。

目前看来,淘宝网对这种模拟人类上网行为的“按键精灵”式爬虫确实也没有什么革命性的方案,或者说没有从技术上实现一种彻底根治的手段,而只能在规则的严苛程度上做出或松或紧的权衡。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
为了研究历科普App,可以采取以下方法、步骤及措施: 1. 确定研究目标:明确要研究的内容和目标,例如想要了解用户对历科普App的需求、评估现有App的功能和用户体验等。 2. 文献综述:进行相关文献的综述,了解已有的研究成果和相关理论,以便为研究提供理论基础和参考。 3. 数据收集:收集与历科普App相关的数据,包括用户馈、评价、使用数据等。可以通过问卷调查、访谈、用户行为分析等方式获取数据。 4. 数据分析:对收集到的数据进行分析,包括统计分析、内容分析、主题分析等,以了解用户需求、App功能和用户体验等方面的情况。 5. 历科普App设计和开发:根据研究结果,对历科普App进行设计和开发,包括功能设计、界面设计、内容制作等。 6. 用户测试和评估:进行用户测试和评估,收集用户的馈和意见,以便对App进行改进和优化。 7. 结果总结和撰写报告:根据研究结果,进行总结和分析,撰写研究报告,包括研究目标、方法、结果和结论等。 8. 推广和应用:将研究成果应用于实际,推广历科普App的使用,提升用户体验和满意度。 在整个研究过程中,需要注意保护用户的隐私和数据安全,确保研究过程的合法性和可靠性。同时,还需关注研究过程中可能出现的伦理问题,并遵守相关的研究伦理规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值