Python爬蟲-爬取騰訊小視頻

這兩天在爬TX的視頻的原始下載地址媒怯,遇到的問題挺多,感覺這個(gè)網(wǎng)站的規(guī)律變化多端的纵装,中間也忘了修改過多少次代碼了征讲,而且有時(shí)候抓包也抓不到一些想要的內(nèi)容,最后也只能抓到一些像《拜托啦學(xué)妹》橡娄、《國(guó)產(chǎn)整蠱大師》類似的小視頻诗箍,長(zhǎng)時(shí)間的視頻最后我看了一下只能拿到前五分鐘的視頻,現(xiàn)在先記錄一下挽唉,供后續(xù)再研究滤祖。

我是利用Chrome直接進(jìn)行抓包的,可以拿到視頻的真實(shí)地址(ps.但是后續(xù)多次嘗試其他小視頻竟然抓不到這個(gè)真實(shí)地址瓶籽,不知道什么原因):

分析-01.png
http://203.205.148.155/vhot2.qqvideo.tc.qq.com/AXTAonPSZxrOwR7IS-ihDRKKiNXe1AI29z6NWNjAUHzQ/u0559hfpsi7.mp4?sdtfrom=v1104&guid=c05f836b267c173e684cec6410185d3b&vkey=9DB055870FCCE159D79ECF6ACD62777A7783FEC58EB4D18F8B3B54164BF7085FDC5E097BF150ADBE2522011A739A844B6AF7FABF6A72D3D9C32E443A11677BBF33E4946EAB82723509823A4045888AE6C5EF367FC4E92603CFFD593945ED4CD9EC1808A02E0B98391D902371DA83641F0173E69E71E1CF50&platform=2

可以進(jìn)行簡(jiǎn)化:

http://203.205.148.155/vhot2.qqvideo.tc.qq.com/u0559hfpsi7.mp4?vkey=9DB055870FCCE159D79ECF6ACD62777A7783FEC58EB4D18F8B3B54164BF7085FDC5E097BF150ADBE2522011A739A844B6AF7FABF6A72D3D9C32E443A11677BBF33E4946EAB82723509823A4045888AE6C5EF367FC4E92603CFFD593945ED4CD9EC1808A02E0B98391D902371DA83641F0173E69E71E1CF50

可以簡(jiǎn)單的分為兩部分:

前半部分:http://203.205.148.155/vhot2.qqvideo.tc.qq.com
后半部分:vid.視頻格式?vkey=...

vid的值可以根據(jù)輸入的小視頻所在的網(wǎng)頁網(wǎng)址獲得匠童;而前半部分以及后半部分的vkey(同一個(gè)視頻不同次請(qǐng)求vkey是不同的)就要根據(jù)抓其他包來獲得了:

分析-02.png

可以看看抓到的這個(gè)包的返回值:

分析-03.png

前半部分可以在url中拿到(可能存在多個(gè)),后半部分可以通過keyid和fvkey拼接拿到棘劣。
然后我就再回頭看如何請(qǐng)求這個(gè)URL俏让,參數(shù)很多,我也進(jìn)行了多次嘗試:

https://vv.video.qq.com/getinfo?callback=txplayerJsonpCallBack_getinfo_502855&&charge=0&defaultfmt=auto&otype=json&guid=c05f836b267c173e684cec6410185d3b&flowid=16326941443e441cde6cc6bc8600a4e8_70201&platform=70201&sdtfrom=v1104&defnpayver=0&appVer=3.3.125&host=v.qq.com&ehost=https%3A%2F%2Fv.qq.com%2F&sphttps=1&_rnd=1507894470&spwm=4&unid=d2b03881abf611e79d19a042d42c850a&vid=u0559hfpsi7&defn=&fhdswitch=0&show1080p=0&isHLS=1&dtype=3&sphls=1&defsrc=1&_qv_rmt=4N45ERvoA10847LFR%3D&_qv_rmt2=sOgo9dd11579401rg%3D&_1507894470324=

如何拿到這些參數(shù)進(jìn)行請(qǐng)求是個(gè)問題,而且當(dāng)我想進(jìn)行一些適當(dāng)?shù)膮?shù)刪減的時(shí)候發(fā)現(xiàn)我拿到的fvkey并不是完整的(個(gè)數(shù)少了很多)首昔,在這個(gè)問題上糾結(jié)了很多寡喝,最后在搜索,把一些參數(shù)固定住勒奇,簡(jiǎn)化成這樣了:

https://av.video.qq.com/getinfo?callback=JsonpCallBack&&charge=0&defaultfmt=auto&otype=json&guid=c05f836b267c173e684cec6410185d3b&platform=70201&sdtfrom=v1104&defnpayver=0&appVer=3.3.128&host=v.qq.com&ehost=https%3A%2F%2Fv.qq.com%2F&_rnd=1507969615&spwm=4&vid={}&_qv_rmt=ZHrqJgF6A10991DBb%3D&_qv_rmt2=y%2FlweBl0157665zsQ%3D&_1507969615506='.format(vid)

然后就開始寫代碼了:

import requests
from requests.exceptions import RequestException
import re
import json

headers={
    'Accept-Encoding':'identity;q=1, *;q=0',
    'Accept-Language':'zh-CN,zh;q=0.8',
    'Accept':'*/*',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
}

#這一部分是為了得到網(wǎng)頁源代碼
def get_html(url):
    response=requests.get(url,headers=headers)
    try:
        if  response.status_code==200:
            return response.text
        return None
    except RequestException as e:
        print(e)
        return None

#這一部分是為了得到參數(shù)vid
def parse_part_1(url):
    try:
        vid=url.split('/')[-1].split('.')[0]
        print('解析URL第一部分vid:'+vid)
        return vid
    except Exception:
        print('解析vid失敗')

#這一部分是為了得到keyid预鬓、vkey、title赊颠、pre_url
def parse_part_2(html):
    try:
        pattern=re.compile('JsonpCallBack\((.*)\)',re.S)
        data=re.search(pattern,html).group(1)
        data=json.loads(data)
        keyid=data.get('vl').get('vi')[0].get('cl').get('ci')[0].get('keyid')
        if len(keyid.split('.'))==3:
            if '10' in keyid:
                keyid=keyid.replace('10', 'p')
            else:
                keyid=list(keyid)
                keyid[12]='p'
                keyid=''.join(keyid)
        else:
            keyid=keyid
        print('解析URL第二部分keyid:'+keyid)
        vkey=data.get('vl').get('vi')[0].get('fvkey')
        print('解析URL第二部分vkey:'+vkey)
        title=data.get('vl').get('vi')[0].get('ti')
        # print('解析URL第二部分title:' + title)
        for i in range(4):
            pre_url=data.get('vl').get('vi')[0].get('ul').get('ui')[i].get('url')
            print('解析URL第二部分pre_url:'+pre_url)
            yield {
                'keyid':keyid,
                'pre_url':pre_url,
                'vkey':vkey,
                'ti':title
                   }
    except Exception:
        print('解析vkey失敗')

#主程序
def main(url):
    try:
        vid=parse_part_1(url)
        if vid:
            url='https://av.video.qq.com/getinfo?callback=JsonpCallBack&&charge=0&defaultfmt=auto&otype=json&guid=c05f836b267c173e684cec6410185d3b&platform=70201&sdtfrom=v1104&defnpayver=0&appVer=3.3.128&host=v.qq.com&ehost=https%3A%2F%2Fv.qq.com%2F&_rnd=1507969615&spwm=4&vid={}&_qv_rmt=ZHrqJgF6A10991DBb%3D&_qv_rmt2=y%2FlweBl0157665zsQ%3D&_1507969615506='.format(vid)
            html=get_html(url)
            if html:
                for each in parse_part_2(html):
                    keyid=each.get('keyid')
                    pre_url=each.get('pre_url')
                    vkey=each.get('vkey')
                    title=each.get('ti')
                    url=pre_url+str(keyid)+'.mp4?vkey='+str(vkey)
                    print('=====視頻:{0}=====下載URL:{1}'.format(title,url)+'\n')
    except Exception:
        print('解析視頻下載URL失敗')

if __name__=='__main__':
    print('溫馨提醒:e.g. https://v.qq.com/x/page/g0024s8pd38.html' )
    url=input('請(qǐng)輸入騰訊視頻地址:')
    main(url)

運(yùn)行后的結(jié)果,得到的下載地址有多個(gè)格二,可隨便打開一個(gè):

運(yùn)行結(jié)果-02.png
運(yùn)行結(jié)果-01.png
運(yùn)行結(jié)果-04.png
運(yùn)行結(jié)果-03.png

現(xiàn)在程序還是存在一定問題,比如keyid的討論竣蹦,比如不能得到大文件的完整視頻顶猜,待后續(xù)進(jìn)行研究。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痘括,一起剝皮案震驚了整個(gè)濱河市长窄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纲菌,老刑警劉巖挠日,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異翰舌,居然都是意外死亡嚣潜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門椅贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懂算,“玉大人,你說我怎么就攤上這事夜涕》咐纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我癣漆,道長(zhǎng)箱亿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任贱呐,我火速辦了婚禮丧诺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奄薇。我一直安慰自己驳阎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呵晚,像睡著了一般蜘腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饵隙,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天撮珠,我揣著相機(jī)與錄音,去河邊找鬼金矛。 笑死芯急,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驶俊。 我是一名探鬼主播娶耍,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼饼酿!你這毒婦竟也來了伺绽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤嗜湃,失蹤者是張志新(化名)和其女友劉穎奈应,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體购披,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杖挣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刚陡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惩妇。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筐乳,靈堂內(nèi)的尸體忽然破棺而出歌殃,到底是詐尸還是另有隱情,我是刑警寧澤蝙云,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布氓皱,位于F島的核電站,受9級(jí)特大地震影響勃刨,放射性物質(zhì)發(fā)生泄漏波材。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一身隐、第九天 我趴在偏房一處隱蔽的房頂上張望廷区。 院中可真熱鬧,春花似錦贾铝、人聲如沸隙轻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玖绿。三九已至敛瓷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镰矿,已是汗流浹背琐驴。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秤标,地道東北人绝淡。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苍姜,于是被迫代替她去往敵國(guó)和親牢酵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評(píng)論 25 707
  • 打開爆米花的網(wǎng)站衙猪,然后打開其中一個(gè)視頻: 分析-00.png 打開F12馍乙,然后刷新,可以看到: 分析-01.png...
    小小佐閱讀 1,243評(píng)論 1 5
  • 馬畫羽現(xiàn)在感覺到自己生不如死垫释,因?yàn)樗龅搅艘患浅<值氖滤扛瘢?jiǎn)直比之前碰到過的任何一件事都要棘手。 因?yàn)樗诨囊爸?..
    馬曉白閱讀 353評(píng)論 2 1
  • 過了零點(diǎn)就是我的生日了棵譬。一年一次显蝌,說快好快,說慢也挺慢的订咸÷穑可能是所說的“過了愛做夢(mèng)的年紀(jì),轟轟烈烈不如平靜”脏嚷,...
    lakey閱讀 230評(píng)論 0 0