爬虫工程师这个岗位是否对新手很不友好

2018-10-17 17:24:10 +08:00
 CharlieBrown

一开始以为爬虫很容易到天花板,干了几个月后,发现一入爬虫深似海。 要懂网络协议、懂 JS、懂 APP 反编译, 本来以为网站 Selenium 能对付了,但现在能识别的网站也渐渐增多, 反编译都衍生出另一个岗位了:逆向工程师。

由于是小公司,也没人讨论、请教,一切都得靠自己搜索、看书、买教程。 一年工作经验不到的人,爬的可能是三五年以上的网站、APP,有种一个人单挑一群人的感觉。

一个网站,能否爬下取决于网站难度, 不像自己从 0 写系统,一步步自己走上去 写完爬虫还担心网站会不会突然升级、爬虫会不会突然不走

现在对前路有点儿迷茫了,有没有人能指点迷津

12466 次点击
所在节点    Python
44 条回复
JCZ2MkKb5S8ZX9pq
2018-10-18 16:54:48 +08:00
爬了也有一阵子了,感觉最有用的的,是找到好用的接口,有些没有签名验证的,或者历史遗留的,就好很多。现在的确越来越难爬了。碰到云防火墙基本没办法,ip 池不够用。
CharlieBrown
2018-10-18 17:07:13 +08:00
yzkcy
2018-10-18 17:21:26 +08:00
#20 讲的会不会有法律风险?
pricelessLucky
2018-10-19 00:47:23 +08:00
@kuroismith 可以给个示例网站看一下吗?有点好奇。
kuroismith
2018-10-19 09:05:13 +08:00
@pricelessLucky 印象里百度指数就是这样做的
bk201
2018-10-19 09:18:15 +08:00
爬虫有点 hacker 的赶脚
wc110302
2018-10-19 11:14:37 +08:00
现在爬虫真的是好难搞啊,我最近在公司里面也是很苦难,面对对方频繁更换反爬策略无从下手,一会儿更换验证码,一会儿更换封 ip 频率,从 PC 端搞到 APP 端,不过说实话现在 APP 的反爬还没 PC 那么严重,得会一些反编译手段,脱壳,逆向,有 JAVA 功底应该不难。现在我也是很苦恼,到底是在 PC 端一路走到底,把 JS 给弄透吃透,还是去好好搞 APP 端,把反编译,逆向这些给弄明白,又或者是在验证码机器学习识别上下功夫
zidian9
2018-10-19 13:17:30 +08:00
@CharlieBrown 并不是,精通 JS 不是万能的。
1. 如果网站的 JS 有(黑盒) uglify,读懂他的 JS 非常困难,成本非常高
2. 存在解不了的 JS,比如 cloudflare 动态下发的 JS (动态下发一个 JS,每次都不一样),无法破解
3. 就算把 JS 取出来,用 V8,node,之类的引擎去运行,也只能解决构造请求的问题。

各种验证码,人机验证。IP 限制,请求频率限制的防爬手段依然难以解决。
zidian9
2018-10-19 13:20:41 +08:00
@wc110302 最简单通用的方式是用 headless 的浏览器,完全模拟人工操作,增大 IP 池,降低访问评率。缺点是效率低,资源成本高
wc110302
2018-10-19 13:38:31 +08:00
@zidian9 --! 先不说目前一部分网站的反爬已经能识别 headless,光是资源耗占以及抓取效率大部分公司都是不会采用的,一部分网站的思路倒是可以通过浏览器拿到 cookie,然后再抓包进行操作
CharlieBrown
2018-10-19 14:28:00 +08:00
@zidian9 你说的关于 js 的第一点应该是类似于混淆吧,
第二点动态下发 js 这个我还真没听说过,
至于 headless 浏览器就如 30 楼所说的,占服务器资源、运行慢且如今已能被识别,而且我记得我当初做天眼查爬虫的时候用浏览器所得到的时间是未经过处理的,也就是显示 2018-10-19,但浏览器返回的是 4122-58-98 这样的,
见过一种思路是直接截图然后 OCR。
最后问一下,怎么输出换行\n 吗
zidian9
2018-10-19 14:40:44 +08:00
@wc110302
@CharlieBrown
headless 理论上不被发现。被发现只是市面上 headless 浏览器有一些特征。理论上自己开发的 headless 浏览器可不被发现。占用资源,跟运行慢在大规模部署下不是太大问题。
OCR 只能解决很少一部分验证码问题。滑动验证,变形字符验证码都不好解决。

简单讲,防爬有很多手段。然而作为一个公司要爬数据,去应对每种防爬手段,给出应对方案,都需要巨大的成本。在我看来是典型的性价比很低的工作。

容易爬的网站,三两下就能爬取到数据。有防爬的网站,要付出很大的努力,也不一定能成功。这个“不一定”,导致我不会去破解复杂的网站。
爬虫这个工作,我认为是不适合职业道路发展的。至少在我们这里,不会有人专门搞爬虫。当然,设计和实现通用的爬虫系统除外。在我看来,爬虫就是针对于不同的网站,写脚本。难以复用。并且网站一旦发版更新,就要修改脚本。是一个十足的体力活。
zidian9
2018-10-19 15:37:25 +08:00
@CharlieBrown 输出换行\n 不太理解是啥意思
locoz
2018-10-19 17:53:37 +08:00
@zidian9 #28
1. 如果网站的 JS 有(黑盒) uglify,读懂他的 JS 非常困难,成本非常高
你说的应该是混淆 /加密后的代码吧,如果只是简单混淆的话,有很多方式能快速找到需要的东西;如果是加密的话,不管怎么加密最终还是会需要还原出原来的代码来执行的,只需要处理一下就可以把原始代码弄出来。弄得多了之后并不需要花费多少时间就能找到需要的部分

2. 存在解不了的 JS,比如 cloudflare 动态下发的 JS (动态下发一个 JS,每次都不一样),无法破解
动态下发的 JS 都会是按一定规律生成的,毕竟最终是为了执行后生成一个加密字符串放到 cookie 或请求里,只要找到规律就破掉了

3. 就算把 JS 取出来,用 V8,node,之类的引擎去运行,也只能解决构造请求的问题。各种验证码,人机验证。IP 限制,请求频率限制的防爬手段依然难以解决。
图片验证码要么机器学习要么接打码平台靠“人工智能”的力量打码
IP 限制、请求频率限制这种无非就是堆 IP、堆账号就能解决的问题
而人机验证就是多来一步 1、2 的步骤之后加上各种拟人轨迹 /设备指纹 /浏览器指纹的生成罢了,实在不行不还有搞灰产的那种打码接口卖么

其实主要看的还是值不值得砸钱堆 IP (高质量 IP 贵)、堆账号(需要手机号接验证码 /需要实名认证 /很容易封号 的贵)、打码(大量打码的情况下贵、人机验证搞不定的情况下用别人的打码接口贵)
locoz
2018-10-19 18:09:15 +08:00
爬虫工程师已经是一个对新手很友好的职业了,大部分公司的需求其实都不难,需求难搞的都是那种做的事情偏灰 /黑产的
研究方向的话可以往逆向和机器学习方面发展,毕竟难搞的东西都需要这两个。尽量减少使用 headless、appium 之类的东西,毕竟很浪费资源且爬的速度慢,对技术水平也不会有太大的提升。
nkydxsjy
2018-10-19 18:57:46 +08:00
关键看自己喜欢与否了~
zidian9
2018-10-19 20:39:44 +08:00
@locoz
1. 无法破解的 js uglify
https://jscrambler.com/

2. 解不了的 js,了解下 cloudflare 的防爬策略,就是下发一个动态的 JS,目的是反爬虫,你需要上一个 node 去运行这个 js

3. 成本高,规则不透明
比如我这里有滑块验证,拖动验证,点击图块等 N 种人机验证,在某些情况下出现 A 验证某些情况下出现 B 验证,你现在做逆向,开发,可能你刚开发完,去大规模部署完之后,运行一段时间,发现新的 C 验证,那么你要重新继续开发。
开发成本高。
locoz
2018-10-20 13:27:08 +08:00
@zidian9 #37
1.这家的东西我还从来没见过有哪个网站用了的,然后官网注册接口也挂掉了,没法测试。根据网上搜到的结果来看只是做了混淆,强度还没有阿里的那么大,并不是无法破解的

2.cloudflare 的那个防 DDoS 的 js 属于最简单级别,从看操作过程到写出破解 demo 连 5 分钟都不用,提出生成参数的那部分执行一下就没别的了,里面也没塞一些会大量占用 CPU 的代码,对成本几乎无影响。你可以了解一下知道创宇和阿里的同类型产品,其实也就只是多了一些混淆、加密、document 操作、浏览器指纹、鼠标轨迹之类的东西而已,把核心部分提出来并把需要拟人的部分生成好执行一遍就完事了

3.成本问题(时间成本和金钱成本)在很多时候其实并不是什么很大的问题,需要用到大量复杂人机验证的数据,数据本身的价值也会很高。但是在使用了那么多人机验证之后服务方还要考虑如何才能不影响普通用户的使用体验,所以国内的像百度、阿里、腾讯、网易等大企业对需要进行保护的部分通常都不会设置太复杂的人机验证,而是依靠各种方式收集证据并使用法律手段来解决掉通过那些部分赚钱的灰黑产
frostming
2018-10-22 10:58:35 +08:00
@kuroismith 既然在前端解密就能用解密逻辑复制出来,但现在前端基本都 minify 过了这确实很麻烦

还有更绝的数据用图片形式返回显示到页面上(我说的就是猫眼)
CharlieBrown
2018-10-22 11:03:41 +08:00
@frostming 反过来想,一旦图像识别的速度上来,就可以使用图像识别搞定 js 加载的数据

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX