<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python批量下載抖音大V主頁(yè)視頻

          共 3841字,需瀏覽 8分鐘

           ·

          2021-02-05 07:27

          上次寫了用 Python 批量下載知乎視頻的方式,這次分享用 Python 批量下載抖音個(gè)人主頁(yè)的全部無(wú)水印視頻,本文重點(diǎn)不是提供一個(gè)好用的腳本,而是講述如何寫出這樣的腳本,正所謂授人以魚(yú),不如授人以漁,所謂的爬蟲(chóng),基本都是這個(gè)套路。

          思路

          先說(shuō)下思路,要批量下載視頻,可以先嘗試成功下載一個(gè),確定沒(méi)有水印,然后在寫一個(gè)循環(huán)進(jìn)行批量下載。

          難點(diǎn):下載一個(gè)視頻可能很簡(jiǎn)單,但下載多個(gè)就稍微有點(diǎn)復(fù)雜,需要抓取多個(gè)視頻對(duì)應(yīng)的 url,抖音這塊做了防爬措施,只允許手機(jī)上看到個(gè)人主頁(yè)的視頻列表,電腦端的網(wǎng)頁(yè)卻看不到,這就需要抓取手機(jī)的 https 包,這里借助 Burpsuite 進(jìn)行抓包。

          這里用到了 Burpsuite ,因此我把自己常用的 Burpsuite 2.1.06 專業(yè)版放在了網(wǎng)盤里面,公眾號(hào)「Python七號(hào)」回復(fù)「burp」獲取,下載后運(yùn)行 start_burp.batsh start_burp.sh 即可一鍵啟動(dòng),無(wú)需購(gòu)買許可,非常方便。

          爬取單個(gè)視頻

          1. 找一個(gè)抖音視頻鏈接,點(diǎn)擊分享,復(fù)制鏈接,在電腦上用打開(kāi),然后打開(kāi)開(kāi)發(fā)者工具,點(diǎn)擊 network 選項(xiàng)。

          2. 刷新,看接口,找到返回值里有播放地址的接口:

          這里面有個(gè) play_addr,內(nèi)部有個(gè) urllist,我們復(fù)制這個(gè) urllist[0] 在瀏覽器打開(kāi),網(wǎng)站跳轉(zhuǎn)到了真正的播放地址,同時(shí)可以看到下載的按鈕:

          下載這個(gè)視頻,發(fā)現(xiàn)是帶水印的,如何下載到不帶水印的視頻呢?網(wǎng)上搜索了下,方法就是將上述 urllist[0] 中的 playwm 改成 play 就可以了。

          然后開(kāi)始寫代碼,獲取這個(gè) urllist[0],并下載


          def?get(share_url)?->?dict:
          ????"""
          ????share_url?->?抖音視頻分享url
          ????返回格式?[{'url':'',?'title','format':'',},{}]
          ????"""

          ????data?=?[]
          ????headers?=?{
          ????????'accept':?'application/json',
          ????????'user-agent':?'Mozilla/5.0?(iPhone;?CPU?iPhone?OS?11_0?like?Mac?OS?X)?AppleWebKit/604.1.38?(KHTML,?like?Gecko)?Version/11.0?Mobile/15A372?Safari/604.1'
          ????}
          ????api?=?"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={item_id}"

          ????rep?=?requests.get(share_url,?headers=headers,?timeout=10)
          ????if?rep.ok:
          ????????#?item_id
          ????????item_id?=?re.findall(r'video/(\d+)',?rep.url)
          ????????if?item_id:
          ????????????item_id?=?item_id[0]
          ????????????#?video?info
          ????????????rep?=?requests.get(api.format(item_id=item_id),?headers=headers,?timeout=10)
          ????????????if?rep.ok?and?rep.json()["status_code"]?==?0:
          ????????????????info?=?rep.json()["item_list"][0]
          ????????????????tmp?=?{}
          ????????????????tmp["title"]?=?info["desc"]

          ????????????????#去水印的視頻鏈接
          ????????????????play_url?=?info["video"]["play_addr"]["url_list"][0].replace('playwm',?'play')
          ????????????????tmp["url"]?=?play_url
          ????????????????tmp["format"]?=?'mp4'
          ????????????????data.append(tmp)

          ????return?data

          if?__name__?=='__main__':
          ????videos?=?get('https://www.iesdouyin.com/share/video/6920538027345415431/?region=&mid=6920538030852885262&u_code=48&titleType=title&did=0&iid=0')
          ????for?video?in?videos:
          ????????downloader.download(video['url'],video['title'],video['format'],'./download')

          這里 downloader.download 函數(shù),與前文知乎視頻下載 里的函數(shù)一樣,這里就不貼代碼了。

          獲取個(gè)人主頁(yè)視頻鏈接

          前兩步已經(jīng)實(shí)現(xiàn)了單個(gè)抖音視頻的無(wú)水印下載,現(xiàn)在我們要做的就是找到大量的這種鏈接,直接循環(huán)就可以了。

          任意打開(kāi)一個(gè)大 V 的個(gè)人主頁(yè),分享,復(fù)制鏈接,使用瀏覽器打開(kāi),一個(gè)視頻也看不到,而使用抖音 App 就可以看到:

          瀏覽器
          抖音APP

          說(shuō)明抖音做了一定的限制,防止從瀏覽器看到多個(gè)視頻的信息。這時(shí)就需要學(xué)會(huì)從手機(jī) APP 來(lái)抓包,看看手機(jī)上的 http 請(qǐng)求是怎么發(fā)起的,然后使用程序來(lái)模擬。

          我一直在用的 BurpSuite(下面簡(jiǎn)稱 Burp) 非常好用,這里順便分享下如何使用:

          1、運(yùn)行 Burp。

          公眾號(hào)「Python七號(hào)」回復(fù)「burp」獲取,下載后運(yùn)行 start_burp.batsh start_burp.sh 來(lái)啟動(dòng) Burp,然后打開(kāi)代理設(shè)置,綁定到運(yùn)行 Burp 的機(jī)器 IP,如下圖所示:

          注意不要設(shè)置 ip 為 127.0.0.1,這樣設(shè)置的話,只有本地請(qǐng)求可以使用代理,手機(jī)無(wú)法連接此代理。

          2、手機(jī)設(shè)置代理。

          手機(jī)與電腦連接同一 wifi,IPhone 的操作如下:然后進(jìn)入設(shè)置-> 無(wú)線局域網(wǎng) -> 點(diǎn)擊同一 wifi 右邊的 information 符號(hào),然后下拉,點(diǎn)擊配置代理,配置和 BurpSuite 一樣的 ip 和端口。Android 的手機(jī)的設(shè)置也差不多。至此可以在 BurpSuite 上抓取手機(jī)的 http 流量。

          3、手機(jī)下載 Burp 的證書(shū),并設(shè)置信任。

          1. 手機(jī)瀏覽器 進(jìn)入 http://burp。
          2. 點(diǎn)擊 CA 下載證書(shū)。
          3. 設(shè)置->通用->描述文件->點(diǎn)擊 PortSwigger CA->安裝
          4. 設(shè)置->通用->關(guān)于本機(jī)->證書(shū)信任設(shè)置,將 BurpSuite 的證書(shū)開(kāi)啟

          這樣就可以抓取手機(jī)上發(fā)起的 https 包了。

          4、設(shè)置 BurpSuite 中斷。

          這一步驟設(shè)置之后,手機(jī)上的請(qǐng)求會(huì)在這里阻塞,你可以放行選擇放行,或修改數(shù)據(jù)包后放行,也可以發(fā)往 repeater,以便后續(xù)重放請(qǐng)求,因此來(lái)自前端的請(qǐng)求是不可信的。

          現(xiàn)在打開(kāi)手機(jī)上的抖音 App,這里便會(huì)出現(xiàn)大量的請(qǐng)求阻塞在這里,我們選擇放行,會(huì)發(fā)現(xiàn)抖音 App 里的數(shù)據(jù)一步一步的出現(xiàn)??焖⒌絺€(gè)人主頁(yè)的視頻之前,將請(qǐng)求發(fā)到 Repeater,如下圖所示:

          然后打開(kāi) BurpSuite 的 Repeater 選項(xiàng)卡,就可以看到剛才發(fā)過(guò)來(lái)的請(qǐng)求,這時(shí)我們選擇重放,看數(shù)據(jù),決定我們需要使用的接口,如下圖所示:

          發(fā)現(xiàn)這個(gè)接口滿足請(qǐng)求,這里可以看到接口的 url,headers 的各種參數(shù),headers 中的 User-Agent 參數(shù),是區(qū)分客戶端是瀏覽器還是 App 的重要標(biāo)識(shí),因此就可以寫代碼來(lái)模擬請(qǐng)求,進(jìn)而獲取需要的批量下載鏈接。

          由于 url 中的參數(shù)非常多,有些是固定不變的,有些隨著不同人的主頁(yè)參數(shù)會(huì)發(fā)生變化,如果僅僅是自己使用,可以簡(jiǎn)單的通過(guò)正則表達(dá)式來(lái)提取這些 url 鏈接,然后進(jìn)行批量下載就可以了。

          如果是想寫好一個(gè)腳本供別人使用,那么就需要做更多的工作,比如說(shuō),需要查看更多的 api,以便確定 url 及 headers 中的參數(shù)是如何獲取或生成的,然后寫腳本自動(dòng)化這一過(guò)程,有些情況下,還涉及到加密混淆等反爬措施,這里就不再展開(kāi)了,請(qǐng)感興趣的讀者自行探索。

          最后的話

          爬取視頻的關(guān)鍵在于找到視頻的播放地址,有了播放地址,即使不寫代碼,也可以使用瀏覽器下載,尋找播放地址還不夠,要考慮是否能去水印,如果要批量下載,那就要知道如何獲取更多的視頻鏈接,在瀏覽器抓取不到的時(shí)候,考慮使用 BurpSuite 抓取手機(jī)的流量包,進(jìn)一步提取接口的數(shù)據(jù),或模擬手機(jī)請(qǐng)求,對(duì)搞爬蟲(chóng)的同學(xué),BurpSuite 是一個(gè)瑞士軍刀,非常實(shí)用。

          如果本文對(duì)你有所幫助,請(qǐng)點(diǎn)個(gè)贊或再看吧,謝謝支持。


          瀏覽 136
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91麻豆精品一区二区三区 | 欧美一役二级三级视频 | 8050网 | 玖玖视频网站 | 天天干天天谢 |