写了一篇关于最近爬虫圈内挺火的一道面试题和它的解法的文章

2019-03-13 10:14:26 +08:00
 locoz
传送门: https://zhuanlan.zhihu.com/p/59005948

历史文章:
当你写爬虫时遇上 Flash+加密的解决方式 https://zhuanlan.zhihu.com/p/45508079
当你写爬虫抓不到 APP 请求包的时候该怎么办? [初级篇] https://zhuanlan.zhihu.com/p/46433599
当你写爬虫抓不到 APP 请求包的时候该怎么办? [中级篇] https://zhuanlan.zhihu.com/p/56397466

(小声逼逼)原文不知道触发了什么关键词检测,发不出来。 @Livid
5467 次点击
所在节点    分享创造
34 条回复
locoz
2019-03-14 09:46:40 +08:00
@leis1015 #15 这种事情没必要不执行 JS 吧 执不执行 JS 爬的速度都差不多,自己重写一个还很麻烦
locoz
2019-03-14 09:50:32 +08:00
@zdnyp #19 直接用 requests 实现不了我觉得挺正常。。因为感觉那个跳转页的图片并不是简单的随便加载一两个就行的,有并发要求(没测试
smyle
2019-03-14 10:51:56 +08:00
我就奇怪这些各种加密,在浏览器里就能顺利解析出来。做个爬虫为什么就那么费劲呢。。。
所以我能不能理解成: 由开发浏览器的人去写爬虫应该是信手拈来?当然,浏览器开发似乎并不简单。。。。
smyle
2019-03-14 10:53:56 +08:00
浏览器似乎“天然”就知道该怎么处理这些加密信息,而爬虫开发者还要一遍遍地抓包、逆向、测试
这是为什么呢?
locoz
2019-03-14 12:07:55 +08:00
@smyle #23 #24 因为浏览器的功能不仅仅是发个 HTTP 请求而已,还包含了执行 JS、渲染页面等各种操作,像这个面试题页面,你打开之后浏览器已经帮你执行好 JS、把 CSS 渲染到页面上展示了,所以在浏览器上打开的时候看起来就很简单,但实际上浏览器内部是做了很多操作的。
而如果做爬虫的话用浏览器去渲染就太“重”了,太多的资源被用在了没必要的解析、渲染和兼容上,这个面试题之所以要求不能使用 selenium 之类的自动化测试工具就是因为平时非必要的情况下没人会拿浏览器去做爬虫,成本高性能低。
再举个例子吧,和爬虫要的效果类似但和爬虫不一样的自动秒杀抢购,如果用浏览器去抢是永远不可能干得过那些破了加密直接调接口抢的人的,速度上不是一个级别(毫秒跟秒)。
Telegram
2019-03-14 16:50:02 +08:00
说白了还是需要用到安卓手机,而且需要 ROOT。
如果这个 APP 是 ios 独占呢?
locoz
2019-03-14 21:11:24 +08:00
@Telegram #26 蛤?你说啥?抓包那个吗?如果是 iOS 独占那就只能找越狱过的 iOS 机子了,并不是没有类似的工具,只是越狱过的 iOS 机子明显没有 ROOT 过的 Android 机子好找。( Android 机 ROOT 不是挺正常的事情吗?要搞这种东西不专门拿个开发机来搞?
smyle
2019-03-14 22:23:14 +08:00
@locoz 这个理解,尽可能轻量、只关注需要的数据。但还有个疑问是,比如说死磕 flash,浏览器开发者是如何做到事先能考虑到这种情况的呢?
我的意思是,有没有可能调试的时候,不用猜测、抓包、逆向等等(这波操作很牛,但确实繁琐),直接顺着浏览器逻辑来做?例如:
1、都是从获取一个 html 页面开始,OK,解析这个 html,找到关键部分;
2、需要下载 js,那就下载;需要执行 js,那就执行;这里需要渲染,那就渲染;需要调用视频播放器,那就调用……
3、最后总能追根溯源抓到源头吧?

这种有没有可行性呢?大多数情况下,会不会比自己一遍遍测试、猜测来的快?
locoz
2019-03-15 11:00:51 +08:00
@smyle #28 “不用猜测、抓包、逆向等等”,你这个说法其实不就是自己弄一个类似 puppeteer 的东西吗?只不过不是用它来渲染页面,而是用它来找到请求和加密函数的位置。但是你想过没有,弄这个东西的时间成本会不会比直接逆向还要高?个人认为是不如直接逆向的
zhengjian
2019-03-15 11:54:46 +08:00
想起了大二的时候爬百度指数,分析加密的时候
stephenliubp
2019-04-25 18:13:06 +08:00
看看一个 iOS 工程师的 Web 端反爬虫技术方案 github.com/FantasticLBP/Anti-WebSpider
locoz
2019-04-28 10:12:27 +08:00
@stephenliubp #31 看了一下,这个就是一般的字体反爬
stephenliubp
2019-04-28 11:31:27 +08:00
@locoz 你可以说说你的爬取思路吗?这个每次都会去更新字体规则,我比较想知道你的爬取思路以及可行性
citrix
2019-05-16 18:43:06 +08:00
@stephenliubp 去哪儿就用的这种反爬技术,google 下针对去哪儿网的爬虫怎么实现。

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

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

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

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

© 2021 V2EX