you-get 关于bilibili部分的函数

来源:互联网 发布:软件开发好学不 编辑:程序博客网 时间:2024/05/16 06:21

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

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/

原创粉丝点击