you-get 关于bilibili部分的函数

作为一个爬虫爱好者,看到好东西就是想爬爬。

you-get 代码阅读
我吧原本的分工明确的代码给小作坊化了 ~

def make_xml_url(self,response):
# response是目标网页的text内容
# 假设目标网页是:https://www.bilibili.com/video/av16806353/?spm_id_from=333.334.chief_recommend.16,那么response就是这个网页的内容
    cid = re.findall(r'cid=(\d+)', response.text)[0]
    aid = re.findall(r'aid=(\d+)', response.text)[0]
    ts = int(time.time())

    # quality是画质的意思?为了简化函数,默认是mp4,mp4的代表值是1
    # 其他的是 fmt2qlt = dict(hdflv=4, flv=3, hdmp4=2, mp4=1)
    params_str = 'cid={}&player=1&quality={}&ts={}'.format(cid, 1, ts)
    sign = hashlib.md5(params_str + self.SEC1).hexdigest()
    # SEC1 = '1c15888dc316e05a15fdd0a02ed6584f'
    # 这个SEC1是必要的参数,怎么来的我还在测试
    params = 'cid={}&player=1&quality={}&ts={}&sign={}'.format(cid, 1, ts, sign)
    # 以上就是获取目标网页必备的参数
    xml_url = self.api_url + params
    # api_url = 'http://interface.bilibili.com/playurl?'主站网址
    # 构造出来的api_url 有什么用?里面是什么?
    # 是视频的真实地址

接下来的是对xml_url的内容解析
xml_url 的部分内容结构大概是如下所示,这些是关于视频的部分

<durl><order>1</order><length>231650</length><size>15926913</size><url>http://cn-zjhz-cu-v-06.acgvideo.com/vg4/upgcxcode/76/83/27458376/27458376-1-16.mp4?expires=1512754200&platform=pc&ssig=UnsLqWatzFaoUab1PqScAw&oi=2634041579&nfa=7K4yyw4Vppryd70IpYUAjw==&dynamic=1&hfa=2014942185&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=</url><backup_url><url>http://cn-sdyt-cu-v-09.acgvideo.com/vg3/upgcxcode/76/83/27458376/27458376-1-16.mp4?expires=1512754200&platform=pc&ssig=Vmqqx_BVx52d_ORtoPGgNg&oi=2634041579&nfa=7K4yyw4Vppryd70IpYUAjw==&dynamic=1&hfa=2014942185&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=</url><url>http://cn-sxxa-cu-v-02.acgvideo.com/vg3/upgcxcode/76/83/27458376/27458376-1-16.mp4?expires=1512754200&platform=pc&ssig=Vmqqx_BVx52d_ORtoPGgNg&oi=2634041579&nfa=7K4yyw4Vppryd70IpYUAjw==&dynamic=1&hfa=2014942185&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=</url></backup_url></durl>

parse 函数对这个内容进行解析

def parse(self,xml_response):
    bs = BeautifulSoup(xml_response.text,features='xml')
    # xml_response.text 是xml格式,然后从bs中提取视频地址
    try:
            cid = re.findall(r'av(\d+)',xml_response)
            size = bs.find('durl').find('length')
            url = bs.find('durl').find('url').text
            self.download(url,cid)
    except Exception as error:
            print ('get real urls wrong!')
            print ('>>> ',error)
            # cid是标识,size是视频大小,url是视频真实地址,有的视频存在多个url,原因是:画质和数量。
def download(self,url,cid):
    content = get_content(url)
    cid = '/you/save/path/cid.mp4'
    with open(cid,'w') as file:
        file.write(content)
    print ('save done')
    # 简单下载

# get_content 就是普通的获取url内容的函数
def get_content(url):
    headers = {'...'}
    try:
        response = requests.get(url,headers=headers)
    excepet Exception as error:
        print (error)
    return response

其他的类似下载的函数都相似,如果想查看更多的内容请点击:
https://you-get.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值