写了一篇关于最近爬虫圈内挺火的一道面试题和它的解法的文章 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
locoz
V2EX    分享创造

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

  •  5
     
  •   locoz 2019-03-13 10:14:26 +08:00 6003 次点击
    这是一个创建于 2405 天前的主题,其中的信息可能已经有所发展或是发生改变。
    传送门: 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
    34 条回复    2019-05-16 18:43:06 +08:00
    rocketman13
        1
    rocketman13  
       2019-03-13 10:17:45 +08:00
    牛逼!
    shyrock
        2
    shyrock  
       2019-03-13 11:06:17 +08:00
    话说这一通分析要多少时间?别人改一丢丢代码是不是之前的分析全废了要重来?
    locoz
        3
    locoz  
    OP
       2019-03-13 11:15:23 +08:00
    @shyrock #2 正常弄的话就几分钟的事情,这个文章里写得细是因为要照顾新手 对方改代码的话要看改了什么,就以这个面试题的情况来说,因为操作复杂度很低+加密简单的关系,即使要改也改不了太多东西,所以不至于出现要重来一遍的情况,最多改一下解析的方式而已。
    jzds001
        4
    jzds001  
       2019-03-13 11:31:22 +08:00
    666666
    zyj321321321
        5
    zyj321321321  
       2019-03-13 11:42:02 +08:00
    以后搞爬虫基本上应该都会涉及到 js 逆向解析这方面了,就这最近半年,感觉这方面的资料也越来越多了起来,感谢楼主的分享。
    hangs
        6
    hangs  
       2019-03-13 13:42:08 +08:00
    :) 想知道你们都是怎么遇到这些面试题的,天天面试吗,还是我找不到组织 cry..
    locoz
        7
    locoz  
    OP
       2019-03-13 14:08:35 +08:00
    @zyj321321321 #5 后面还有 APP 逆向相关的,可以关注一下专栏等更新
    locoz
        8
    locoz  
    OP
       2019-03-13 14:09:26 +08:00
    @hangs #6 就各种爬虫群里都有看到有人提这个面试题,一开始是谁发出来的已经不得而知了
    lorryo
        9
    lorryo  
       2019-03-13 14:48:02 +08:00
    @locoz t/528509 洋钱罐借款 这个 APP 求解怎么抓包?
    lorryo
        10
    lorryo  
       2019-03-13 14:49:56 +08:00
    以看雪上的方法"开个 VPN 然后转发到抓包工具",我试了下,这个 APP 还是抓不到,其他的可以。不知道是不是我配置有问题。
    est
        11
    est  
       2019-03-13 14:52:29 +08:00
    @shyrock 国内这种一帮人负责建栅栏一帮人负责拆栅栏的事儿太多了。
    Johnson66
        12
    Johnson66  
       2019-03-13 15:07:55 +08:00
    看了一下,js 就 400-500 百行~~ 难度不高
    locoz
        13
    locoz  
    OP
       2019-03-13 15:32:20 +08:00
    @yzkcy #10 可能是开了双向证书认证( HPKP ),看看雪那个帖子里的截图可能还有他们自己弄的检测,有空帮你看看
    locoz
        14
    locoz  
    OP
       2019-03-13 15:32:42 +08:00
    @Johnson66 #12 是的,简单难度
    leis1015
        15
    leis1015  
       2019-03-13 15:46:23 +08:00 via iPhone
    允许执行 js 就不难

    最近碰到比较难的是改版后斗鱼的 web 的视频链接,有大佬能不执行 js 获取到最高画质视频链接吗?

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

    这种有没有可行性呢?大多数情况下,会不会比自己一遍遍测试、猜测来的快?
    locoz
        29
    locoz  
    OP
       2019-03-15 11:00:51 +08:00
    @smyle #28 “不用猜测、抓包、逆向等等”,你这个说法其实不就是自己弄一个类似 puppeteer 的东西吗?只不过不是用它来渲染页面,而是用它来找到请求和加密函数的位置。但是你想过没有,弄这个东西的时间成本会不会比直接逆向还要高?个人认为是不如直接逆向的
    mmnsghgn
        30
    mmnsghgn  
       2019-03-15 11:54:46 +08:00
    想起了大二的时候爬百度指数,分析加密的时候
    stephenliubp
        31
    stephenliubp  
       2019-04-25 18:13:06 +08:00
    看看一个 iOS 工程师的 Web 端反爬虫技术方案 github.com/FantasticLBP/Anti-WebSpider
    locoz
        32
    locoz  
    OP
       2019-04-28 10:12:27 +08:00
    @stephenliubp #31 看了一下,这个就是一般的字体反爬
    stephenliubp
        33
    stephenliubp  
       2019-04-28 11:31:27 +08:00
    @locoz 你可以说说你的爬取思路吗?这个每次都会去更新字体规则,我比较想知道你的爬取思路以及可行性
    citrix
        34
    citrix  
       2019-05-16 18:43:06 +08:00 via Android
    @stephenliubp 去哪儿就用的这种反爬技术,google 下针对去哪儿网的爬虫怎么实现。
    关于     帮助文档     自助推广系统 &nbp;   博客     API     FAQ     Solana     904 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:36 PVG 06:36 LAX 15:36 JFK 18:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86