谈谈爬虫的昨天、今天和明天

本人接触爬虫及其相关技术已经有大概一年半的时间。虽然为了吃饭不得不从事爬虫相关工作,但实际上个人是比较不喜欢这个行业的。这篇文章主要是写给想要从事这个行业的人,让新人可以知道这个行业都在做什么以及未来发展如何,当然也欢迎同行和大牛的指正。

这篇文章是一个综述性质的文章,首先会 “简要” 介绍一下爬虫技术的历史;然后在第二部分,我会介绍自己接触过的一些当前常用的网络内容爬取技术;最后写一些关于这个行业未来个人的看法。

由于我本身不是从事搜索引擎这种大规模爬虫研发的,所以第二部分更关注的是一些破解技术,而不是例如高并发、爬取策略、缓存等这类大规模爬虫技术;同时也不关注 IoT 领域的爬虫技术发展。第三部分的核心观点是:我不建议有志之士进入这个行业

1. 爬虫的昨天:从搜索引擎说起

网络爬虫(web crawler、spider)这个名字本身就是来源于搜索引擎的原理:利用网页之间的链接,网络程序可以从一个网站发现新的网站,同时对网页内容进行解析、存储、赋权等操作。

在互联网发展的早期(大约 2005 年前),谷歌、百度等公司迅速成为行业巨头,其成功可以说是搭建在爬虫技术之上的。

与此同时或稍晚一些,一些中小公司开始利用爬虫技术来自动获取网络上公开的数据,但当时对于爬虫的热情程度,远不及最近几 (10?) 年。

随着大数据、人工智能概念的普及,很多创业公司或者打其旗号,或者想在相关领域脱颖而出。数据哪里来呢?绝大多数是来自于爬取。另一方面,随着互联网相关产业的发展,有很多项目研发模式都是依托于爬虫技术的。比如一些新想法的快速验证,项目冷启动的数据来源等等。越来越多的公司会把注意力集中在自己擅长的领域,至于数据哪里来,答案还是爬取。

一个典型的例子是今日头条早期,当时头条还没有做 UGC 业务,大量的新闻数据来自于网易、新浪等传统的新闻网站,而头条的技术人员专注于将个性化投放做到行业领先,成功吃掉了这些传统新闻网站的大部分用户。

也有一些本身就是基于爬虫的产品,例如机票比价的服务,淘宝历史价格追溯的服务 (早年我还在用 360 浏览器的时候有这个功能,不知道现在还有没有了)。此外,互联网激烈的竞争导致产品的数据对标分析近乎常态,你的对手不可能把数据给你吧,那对标数据哪里来?一个字:爬。

以上总总,可见爬虫技术一路走来,可以说是当今互联网一个非常重要的技术组成了。据估计,目前网络上的流量超过 50% 都是爬虫!(具体出处我已经找不到了)

然而戏剧性的是,虽然爬虫技术的应用场景如此广泛,相比于前端、后端、算法等岗位,爬虫工程师的收入可以说是很低的,从心理上来说也是位于鄙视链的底端!

2. 爬虫的今天:PC 与移动端

2.1 PC 页爬取的相关技术

我们经常和产品说的一句话是:PC 页爬取的需求基本都能做

这是由于早期的互联网产品形态和技术原因,PC 站爬取整体难度并不大,或者说相对于移动端来说并不大。从产品形态来说,PC 站很多无需登录即可访问大部分内容,且PC 站需要搜索引擎访问以提高其搜索排名,这使得其内容更容易获取(相比较移动端普遍需要登录且不需要给搜索引擎提供便利);技术上来说,PC 站使用的是浏览器加载 html、js 和 css 的方式,相关技术比较成熟,学习曲线平缓,调试工具丰富,且对应的操作系统安全性考量不如移动端高。

PC 站的数据来源一般来说有以下三种:

  • 查看网页 (html) 是否可以直接下载解析
  • 查看是否有数据接口可用 (PC、m 站、历史版本接口)
    • PC 接口直接打开浏览器调试工具或使用 charles 抓包
    • m 站接口可以通过浏览器调试工具切换成手机视图再抓包
    • 历史版本接口可以直接通过 baidu、谷歌或者 github 搜索关键字,或者看一下自己公司之前的历史代码、wiki 等,这个就属于碰运气了
  • 代码操作 (无头) 浏览器 (例如 Selenium 等) 拿数据 (无头浏览器汇总):可以解决大部分疑难问题,缺点是效率低、稳定性差

针对 PC 页常见的反爬手段和对应措施:

  • 封 ip:破解核心是通过代理来切换 ip
    • 付费代理
    • 爬取免费代理
  • 特定 header 参数:伪造即可
  • 接口签名:破解核心是搞清楚签名机制
    • 完全弄懂其 js 并通过其他语言重写签名算法,效率最高
    • nodejs 在服务器上执行签名代码获取签名
    • 代码操作 (无头) 浏览器
  • js 跳转 + 携带特定 cookie:类似于接口签名的解决思路
  • js 混淆:情况比较复杂,具体情况具体分析
  • 登陆 + cookie:批量注册虚假账号,分析登陆接口和返回数据,模拟登陆
  • 传统验证码:
    • 如果高频弹出、或者新 ip 首次访问弹出验证码,可以接入第三方或自研的打码服务
    • 如果验证码弹出频率较低且是短期抓取任务,可以在需要填写验证码的时候手工处理
    • 如果一个 ip 访问几次才出现验证码,可以通过使用代理的方式规避验证码
  • 新式验证码(点击、滑块):这部分我几乎没接触过,现看了网上的一些资料,主要是通过代码操作浏览器的方式进行破解,具体见参考资料
  • 其他,比如页面核心数据通过字体加密(网上有相关资料)、蜜罐(没有遇到过)等

2.2 移动端爬取的相关技术

移动端相较于 PC 页爬取的几个难点如下:

  • 设备绑定:移动端可以通过获取硬件设备 id 来识别用户身份,而 PC 站浏览器是没有这么高的权限的,一些例如浏览器指纹的技术也未能被广泛采用
  • 手机号绑定:APP 使用需要注册这件事几乎可以说是一个使用常识了,基本核心的数据都需要登录后才能查看。而 APP 登录往往需要和手机号绑定,而手机号又和身份证绑定。如果需要获取大量手机号就需要拿到大量虚假的身份信息,这常常是违法行为
  • 网络多样化:APP 的部分核心数据可以不通过 http 协议进行传输,给抓包带来更大难度
  • 数据加密:数据加密涉及到加密和解密两个步骤。对于 PC 页因为解密需要 JS 操作,而 JS 对于用户是可见的,从理论上来说不存在无法破解的情况;而 APP 由于本身代码不易被接触到的特性,所以对于加密数据的解密基本无解
  • 操作系统安全:app 抓取的一个常用技术是代理人模式,对于高版本的安卓系统信任第三方证书已经很难搞了;而苹果系统虽然可以安装证书,操作软件却难度较大,且设备成本高

目前我接触过的(基本都是同事做的)移动端抓取技术主要包括:

  • 抓接口:如果没有防护直接使用
  • 控制手机软件+代理人模式:这本质上类似于 PC 页抓取控制浏览器的思路,如果无法破解就不破解,直接模拟用户请求拿数据就行了;控制手机软件可以通过安卓的无障碍模式
  • 手机 root 后直接读取手机本地数据库数据
  • 见过某大牛博客直接破解手机软件的,不过本人和身边的同事技术都没有这么高超,同时我对爬虫这个东西怎么也提不起兴趣

3. 爬虫的明天:需求、技术、成本、未来

3.1 谈未来前先谈谈需求

3.1.1 爬虫本身的不确定性

保证软件良好运行的核心是控制软件的复杂度与不确定性,控制复杂度类似于骑马手持缰绳,而控制不确定性类似于把马圈在栅栏里。

抓取这件事本身,就是不确定性非常高的事情:反爬策略、对方接口迭代、对方数据结构改变、目标内容下线。所以说依赖抓取的产品,本身存在不稳定性的风险,所以在产品提需求时,一定要确定这是短期需求还是长期需求;如果是长期需求,需要看看是否有别的方式可以弥补不确定性。如果在讨论需求的时候不考虑这些,就很容易将自身置于泥潭之中。

3.1.2 爬虫需求的不灭性

在可以预见的未来,爬虫的需求是会越来越强烈的。这是个数据需求如此强烈的时代,低成本获取数据的诱惑实在是太大了!正如盗版行业不会被消灭一样,爬虫的需求也具备不灭性。即便爬取难度随着时间正逐渐升高,且这个行业背负着道德和法律的双重风险,老板和技术负责人们依旧会不停地产出爬取需求的新点子!

3.1.3 PC 与移动端

正如第二章介绍的,PC 爬取难度远低于移动端。但从当前互联网产品的发展来看,未来高用户量产品必将继续向移动端发展,很多产品甚至 PC 站只保留海报和 APP 下载功能了!

个人电脑产生之初是作为工具被研发出来,随着发展逐渐变为娱乐设备,未来必然将再次退化为工具。而一方面工具将和用户身份相互绑定,另一方面作为工具的网页很难引起大家的爬取需求。

所以虽然 PC 站的爬取技术很成熟,但未来是没什么用的! 而移动端技术难度又比较大,虽然随着需求的强烈程度增加,抓取难度肯定会下降,不过这要过多久呢?五年还是十年?到那个时候,互联网的行业风向又将在哪里呢?

The future of web scraping is actually linked with the future of web!

3.2 爬虫行业几个主流发展方向

3.2.1 人工智能

目前已经知道的人工智能在爬虫领域的发展包括以下方面:

  • 网页内容解析与提取:上面提到过爬虫本身是很难控制复杂度的软件。人工智能已经被应用于网页核心内容的自动提取(去广告等)。例如 Diffbot 这家美国公司,已经有自己成熟的产品
  • 人类行为模拟:例如目前点击验证码和滑块验证码一般会基于人类行为数据以及神经网络模型,进行反爬模型训练;与之对应的,爬虫本身也可以根据人类行为数据进行模拟训练,达到欺骗反爬模型的目的;另外一个例子就是 APP 检测用户行为是否正常,可以通过一些人工智能的手段模拟人类的使用行为,来欺骗检测
  • 计算机视觉:比较简单的应用场景是传统的图形验证码识别;另外,由于 APP数据通过其他方法获取很难,因此可以通过计算机视觉提取所需的感兴趣数据;另一个例子是 google已经开始采用基于人工智能的图像和视频内容理解技术,因为传统的搜索引擎只能检索如标题、上下文之类的文字信息,如果这个技术有所突破,google 的图片和视频搜索将更加准确

未来人工智能技术会在爬虫领域有更多的应用,毕竟新技术各行各业都迫切地需要拿来解决自己的痛点问题。

3.2.2 集中式爬虫机构

从前文我们可以看出,爬虫技术的难度越来越高,同时还有较高的道德和法律风险。这使得未来,会出现几个比较大的爬虫供应商,这些集中式的爬虫机构,钻研爬虫技术,承担各种风险,当然也会有高额的利润作为回报。

实际上,目前国内已经有类似的厂商,并且我也接触过。虽然并不光鲜,但绝对是未来的发展趋势。

3.2.3 工具软件、手机厂商与剑走偏锋

工具软件与手机厂商似乎和爬虫没什么关系,他们两者看起来也没什么关联。但他们的共同点是:通过某种方法绕过了爬虫的常见困难,直接采集用户数据,而且可以操作得更加肆无忌惮。

我见过的某公众号助手,同时也兼做公众号流量数据提供商,虽然两者可能没什么直接联系,但至少这是一条能拿到其他厂商核心数据的可行和有效途径。

而手机厂商可以绕过设备、用户的壁垒,各个软件可以说是对其门户大开,想做一些数据采集类的工作,简直轻而易举!

3.3 我对这个行业的看法

我对这个行业的看法很简单:有志之士不应该进入这一行业

有人可能反驳说,爬虫也可以技术做得很深入啊,技术面很广啊等等诸如此类。但我想问:如果人生每天只是用来破解别人的防护措施,这样的人生有什么意义?

这本质上和知道茴字有四种写法没什么区别:都毫无意义!除了让自己觉得自己好像很 nb。更不用说爬虫这个行业的道德负担和法律风险。如果只是混口吃食还行,想作为自己的事业还是算了吧,我敢保证那样的话将是个无趣的人生。

有志之士应该做什么?应该像乔布斯一样创造改变世界的产品,应该和马斯克一样把人生目标定位在火星移民,应该如比尔盖茨一样为了世界疫苗普及贡献自己的力量。

或许这些都太虚了,但作为一个人,至少不要让自己堕入黑暗而不自知

附录:参考资料和有用的资源

参考资料

资源

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值