网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 网站建设 » 正文

淘宝直播弹幕爬虫

2019-8-7 7:4:45 | 作者:老铁SEO | 0个评论 | 人浏览

  公司有通过淘宝直播间短链接来爬取直播弹幕的需求, 奈何即便google上面也仅找到一个相关的话题, 还没有答案. 所以只能自食其力了.

  我们继续查看收到的消息, 发现消息的压缩类型compressType有两种: COMMON和GZIP. data的值肯定就是目标消息了, 看起来像经过了base64编码, 解密过程后面再说.

  现在我们首先要解决的问题是如何拿到websocket地址. 分析一下html source, 发现可以通过其中不变的部分查找到脚本:

  然鹅, 拿到这块整个的脚本格式化之后发现, 原始代码明显是模块化开发的, 经过了打包压缩. 所以我们只能分析模块内一小块代码, 这是没有意义的.

  但是我们可以观察到不同的直播间websocket地址唯一不同的只有token, 所以我们可以想办法拿到token. 当然这是很恶心的环节, 完全没有头绪, 想到的各种可能性都失败了. 后面像无头苍蝇一样看页面发起的请求, 竟然给找到了...

  puppeteer是谷歌推出的开放Node API的无头浏览器, 理论上可以可编程化地控制浏览器的各种行为, 对于我们的场景来说就是:

  这里有个性能优化的小技巧. puppeteer官方示例中获取page实例会打开一个新页面:const page = await browser.newPage(), 实际上浏览器启动本来就默认有个about:blank页面打开, 我们的代码中直接是获取这个打开的实例来跳转直播页面, 这样就可以少一个进程.

  可以ps axgrep puppeteer观察启动的进程数来进行对比, 默认有两个主进程, 剩余的都是页面进程.

  现在我们能持续拉取消息了, 这样会方便分析. 前面我们分析页面的时候发现compressType有两种: COMMON和GZIP. 经过尝试, COMMON的可以直接得到明文, 而GZIP的需要再经过一次gunzip解码. 解码结果大致如下, 里面已经可以看到昵称和弹幕内容了:

  然鹅, 一切才刚刚开始...内容里面是有乱码的, 基于这样的内容做正则匹配无果. 如果尝试直接保存buffer或者buffer.toString()到文件会发现文件根本打不开, 内容是无法解析的:

  这些值可能是由有效字符编码按一定规则换算过来, 但谁又能猜得到呢, 也没必要.

  当然这个pattern同样能匹配到关注主播的弹幕, 这不是我们想要的. 我们可以通过一串确定的buffer字符串提前过滤掉这种消息:

  当然可能还存在一个问题, 是关于上面分析结果表里的barrage前, 有连续的5位固定不变, 实际上刚开始是连同前面一位共6位不变的, 结果过了一天之后前面那位从130变到了131, 而再往前的几位变化频率则特别高. 所以我怀疑这些值有可能是跟当前时间有关.

  可能不确定的一段时间之后这5位固定值也会变掉吧, 到时正则就得调整了, 但应该可以正常运行很久了. 如有哪些同仁感兴趣, 可以找找规律.

  实际使用时流程大致应该是这样的: 收到请求之后主进程fork一个爬虫子进程来获取websocket url, 子进程返回结果给主进程, 在使用方建立websocket连接(抢过连接)之后, 子进程便可自杀释放资源, 自杀的同时browser.close()杀死puppeteer相关进程.

  之所以这样做是因为测试下来: websocket断开连接不久token会失效.

  无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章 无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章 无标题文章无标题文章无标题文章无标题文章 无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章无标题文章 无标题...

  从V1迁移到V2由于使用的是webpack版本是2.2.1,所以针对原文做了一些修改。针对webpack2的修改部分和添加的部分在最底部,文中已经改过来了。 写在前面的话阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限...

  我一直以为自己是怎么吃也不会胖的那种人,于是天整日里胡吃海喝,终于不得不面对现实:买衣服号大一点不说,上身还不好看;跑步也跑不动,全身酸软;体检一下更不得了,竟然有轻度脂肪肝。我仔细照照镜子,看看有点变形的自己,默默地告诉自己:减吧,减吧。 我上网查阅了大量资料,该如何快速...

  百合花语是指百合具有百年好合美好家庭、伟大的爱之含意,有深深祝福的意义。收到这种花的祝福的人具有清纯天真的性格,集众人宠爱于一身,不过光凭这一点并不能平静度过一生,必须具备自制力,抵抗外界的诱惑,才能保持不被污染的纯真。——来自百度百科 初遇为安 莫离拖着疲惫的身躯慢悠悠地...

  目标: 1、月入2W以上 2、通过施与受的冥想协助北京的老师身体早日康复 金刚六宝: 【学习目标:能断金刚与七阶课件】完成阅读24期 【冥想目标:30分钟】两次施与受的冥想42分钟 (思维空性:我创造了这里的一切人事物,所有被我看到听到感受到的,都来自我的种子。) 【瑜伽目...

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:淘宝爬虫  
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。