zoukankan      html  css  js  c++  java
  • 云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务

    这个小玩意源于上周在研究Azure的时候,发现云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务
    具体来说,比如阿里云就推荐使用消息服务替代消息队列
    在Azure中,就有一个轻量级的存储队列(Storage Queue)可以替代服务总线(Service Bus)

    简单试用了一下Azure的Storage Queue后,发现这玩意很好用,于是决定全面的深入研究一下,再将公司电商系统内的相关任务处理均重构成使用存储队列服务,而深入研究得找个案例呀,于是就想到了做个分布式爬虫,此类应用会出现大量的任务场景,而正好前段时间下载B站视频时,找到一个网站,叫唧唧下载(搞二次元的都是色情狂吗?),但又不太好用,于是决定就做个比较全面的B站视频爬虫。一方面可以方便的下载视频,另一方面还可以当做公司开发人员的教学案例

    老规矩,还是先看下最终的使用效果,应用入口:https://www.alphams.cn/LT,(为了防止滥用下载以及记录下载,所以还麻烦注册一下啦

    image_thumb[5]

    输入视频番号,点击下载,就进入任务界面

    image_thumb[2]

    任务界面可以看到视频信息实时下载信息,和错误信息

    任务处理完成后,点击立即下载,从一个CDN加速的地址得到了视频

    image_thumb[8]


    那么下面就把本次的开发和实施流水账记录一下

    1、首先是准备工作和可行性调研

    想要对B站进行爬虫,首先要准备好技术手段和相关工具,对B站的网站结构和数据流向进行一些分析,进行可行性的调研

    首先打开B站任意一个视频,可以看到地址都是这样的格式

    image_thumb[20]

    于是我们把AV后面的号码叫做番号(此番号非老司机番号)

    而有些视频不止一段,如果是第二段视频,则是这个地址:

    image_thumb[22]

    而如果把Index后面的2换成1,也可以达到和第一个地址一样的效果

    然后用Fidder工具,分析一下网页,可以看到有如下一些资源

    image_thumb[11]

    剔除基本的JS文件、CSS文件、图像文件后,剩下来的就是一些有用的信息了,而在有用的信息中最终筛选出如下几个信息

    1、AID是视频的番号,也就是网址URL后面的那串唯一数字

    2、CID是弹幕的番号,每个视频AID会对应一个CID

    3、弹幕的信息存储在了这样的URL中:http://comment.bilibili.com/15075110.xml

    4、视频的信息存储在了这样的URL中:https://interface.bilibili.com/playurl?cid=15075110&appkey=84956560bc028eb7&otype=json&type=&quality=3&sign=c070bfd93a84cab542e7c874add6839e

    因为本次主要是下载视频,所以就着重看一下视频存储的信息,打开上面的URL后发现了最终视频的地址

    image_thumb[14]

    太好了,一下子就给了视频尺寸视频最终的下载地址,那么我们用浏览器打开一下这个URL看一下,可以成功下载

    注:以上相关分析实际上是经过了1-2个小时的反复尝试和模拟得出的,有2个细节补充一下,1、B站的服务器会根据HTTP头信息的不同返回FLV格式或者MP4格式,2、B站的视频可能用了不同厂商的CDN服务,有些视频地址无法直接下载,会判断refer信息和浏览器信息

    接下来继续分析,注意看这个URL可以发现,尾部有一个sign,说明做了客户端和服务端的签名验证,并不是很傻瓜的有直接通过AID或者CID关联的下载地址,分析进入到这一步后,我很快的就打了自己的脸,我曾在文章《关于.NET玩爬虫这些事》中说过,一切网站行为都可以分析出HTTP+Javascript来,只要分析得当,根本不需要用浏览器来进行爬虫模拟,但这尼玛B站鬼的Web结构(忍不住想骂人,典型的垃圾Python、PHP向的开发人员做出来的鬼东西,代码逻辑混乱、随便一看就是到处修补修改的痕迹,生成出来的HTML、JS的逻辑和层次毫无美感),看了2个小时,眼睛都看疼了,楞是没分析出签名方法,也许再看看会有结果,但是我等不及了,所以这时候祭出爬虫神器-无头浏览器

    这里我选择了PhantomJS这个无头浏览器,具体的使用过程就不详述了,有兴趣可以到官网了解一下

    http://www.cnblogs.com/printhelloworld/p/6944343.html

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/softidea/p/6958008.html
Copyright © 2011-2022 走看看