摘要:我們知道,在抖音中下載到的視頻是有水印的,這就催生出了很多抖音短視頻去水印的解析網(wǎng)站,小程序等。禁止重定向,設(shè)置運行結(jié)果,是一個標(biāo)簽,便是重定向后的地址。
我們知道,在抖音APP中下載到的視頻是有水印的,這就催生出了很多抖音短視頻去水印的解析網(wǎng)站,小程序等。所以說,抖音短視頻去水印這個東西并不是什么新鮮玩意兒,甚至你可以很輕松的在網(wǎng)上搜到抖音去水印的程序源代碼。
本文主要是從爬蟲程序的角度,講解遇到這樣的問題我們應(yīng)該如何分析,如何抓包,如何一步步寫出自己的爬蟲,讓大家明白去水印的接口是怎么找到的,網(wǎng)上的代碼是怎么寫出來的。
我會盡量講解細(xì)致一些,爭取讓初學(xué)者也能看懂。
話不多說,我們開始。
首先,從分享鏈接入手,在抖音APP中分享視頻,點擊復(fù)制鏈接,即可得到如下所示的分享文字。
1.25 GiC:/ 我把自己拍尷尬了 https://v.douyin.com/RCxwDgH/ 復(fù)制此鏈接,打幵Dou音搜索,直接觀看視頻!
其中關(guān)鍵的部分 https://v.douyin.com/RCxwDgH/
復(fù)制到瀏覽器中打開后,會跳轉(zhuǎn)到一個網(wǎng)頁
網(wǎng)址是: https://www.douyin.com/video/6858559656789314823?previous_page=app_code_link
我們會發(fā)現(xiàn),網(wǎng)頁中的這個視頻,是沒有水印的!?。?/p>
也就是說,我們只需要把網(wǎng)頁中的這個視頻下載下來就可以了。
如果你想手動下載的話,其實很簡單。
打開瀏覽器的開發(fā)者工具,切換到 Network,過濾器選擇 Media,然后刷新網(wǎng)頁,這時候就會發(fā)現(xiàn)抓到一個請求包。
復(fù)制 URL 打開,鼠標(biāo)右鍵,視頻另存為就可以下載了。
無水印視頻鏈接:https://v26-web.douyinvod.com/f86f203fbba3d04f481c7af6acc511fa/61975068/video/tos/cn/tos-cn-ve-15/c4e41d807c5c4f94952663c2309fa3fa/?a=6383&br=1481&bt=1481&cd=0%7C0%7C0&ch=26&cr=3&cs=0&cv=1&dr=0&ds=6&er=&ft=VgcwUVIIL7ThWHVQJoAGZ&l=021637302857724fdbddc0200ff2f010a9f221d00000033acdf08&lr=all&mime_type=video_mp4&net=0&pl=0&qs=0&rc=anB0Mzo8Ojs6djMzOmkzM0ApPGY3NWg0NGQ0NzQ7aDU1O2c2ajZfLzNuc2tfLS0yLTBzczAzNjIzXmIvLzEvYS80YGM6Yw%3D%3D&vl=&vr=
如果大家臨時有視頻去水印的需求,又不想寫代碼時,可以試試這個方法。
手動抓包確實簡單有效,但是我們目標(biāo)還是想用代碼的方式,來實現(xiàn)一鍵解析和視頻下載。這樣純手動下載顯然達(dá)不到我們的要求。
我們重新回過頭來捋一捋。
首先,我們訪問 https://v.douyin.com/RCxwDgH/ 網(wǎng)址時,會重定向跳轉(zhuǎn)到一個別的網(wǎng)址。
這個重定向的過程在瀏覽器中是一瞬間完成的,這個過程中發(fā)生了什么我們并不清楚,不過我們可以通過 Python 來發(fā)起請求。
import requestsheaders = { "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",}url = "https://v.douyin.com/RCxwDgH/"# 禁止重定向,設(shè)置 allow_redirects=Falser = requests.get(url, headers=headers, allow_redirects=False)print(r.text)
運行結(jié)果,是一個 a
標(biāo)簽,href
便是重定向后的地址。
不過,關(guān)于重定向的情況,一般我們獲取它的 r.headers
在其中查找 location
的值。
獲取到重定向后的地址之后,我們訪問該地址。
https://www.iesdouyin.com/share/video/6858559656789314823/?region=CN&mid=6854453604732930830&u_code=g7cdm25h&did=MS4wLjABAAAAJpp7hV0jI_UmBK5e8bohlVWuTbp5g5YP9t7IyMG2Skw&iid=MS4wLjABAAAA7B2f-zA3mnMTjsIabum2jA5-w3x1-8wwtcAhpEGVySs&with_sec_did=1&titleType=title&utm_source=copy&utm_campaign=client_share&utm_medium=android&app=aweme
注:這里有個小坑,如果你用 PC 瀏覽器直接訪問這個地址的話,它又會跳轉(zhuǎn)到另一個網(wǎng)址 https://www.douyin.com/video/6858559656789314823?previous_page=app_code_link
;而用手機(jī)瀏覽器訪問的話,地址則維持不變(在開發(fā)者工具中,點擊圖中箭頭所指的位置,可以切換成手機(jī)瀏覽器模式)。
而我們破解無水印短視頻的關(guān)鍵接口,在手機(jī)瀏覽器模式下訪問才能抓到。
視頻信息接口:https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6858559656789314823
只有一個參數(shù) item_ids
,而它的值在前面重定向的鏈接中可以獲取到。
無水印視頻鏈接就在 item_list[0]
-> video
-> play_addr
-> url_list[0]
。
無水印視頻鏈接:https://v6-z.douyinvod.com/21880dfba8d9ab45fff8993ca2c35176/619741c7/video/tos/cn/tos-cn-ve-15/c4e41d807c5c4f94952663c2309fa3fa/?a=1128&br=1481&bt=1481&cd=0%7C0%7C0&ch=96&cr=0&cs=0&cv=1&dr=0&ds=6&er=&ft=5f4rKJmmnPNJ2Xh7ThWwkXAGfdH.Co5TpBZc&l=202111191318320102121980270E038AAF&lr=all&mime_type=video_mp4&net=0&pl=0&qs=0&rc=anB0Mzo8Ojs6djMzOmkzM0ApPGY3NWg0NGQ0NzQ7aDU1O2cpaHV2fWVuZDFwekA2ajZfLzNuc2tfLS0yLTBzczAzNjIzXmIvLzEvYS80YGM6Y29zYlxmK2BtYmJeYA%3D%3D&vl=&vr=
上述我們通過兩種方法,手動抓包和代碼的方式獲取到了抖音去水印的視頻鏈接。
接下來我們編寫代碼,完成我們的爬蟲程序。
首先是一些準(zhǔn)備工作,導(dǎo)入需要的庫
import requestsimport json
根據(jù) 短分享鏈接
獲取重定向后的 長分享鏈接
的函數(shù)
def get_share_url(url): headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3904.108 Safari/537.36", } try: r = requests.get(url, headers=headers, allow_redirects=False) return r.headers["location"] except Exception as e: print("解析失敗") print(e)
根據(jù) 長分享鏈接
獲取 無水印視頻下載鏈接
的函數(shù)
def get_video_url(url): try: headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3904.108 Safari/537.36", } vid = url.split("/?")[0].split("video/")[1] xhr_url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={vid}" r = requests.get(xhr_url, headers=headers).json() video_url = r["item_list"][0]["video"]["play_addr"]["url_list"][0] return video_url except Exception as e: print("解析失敗") print(e)
下載視頻的函數(shù)
def download_video(url): headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3904.108 Safari/537.36", } try: r = requests.get(url, headers=headers) with open("video.mp4", "wb") as f: f.write(r.content) except Exception as e: print("下載失敗") print(e)
以及主函數(shù)
if __name__ == "__main__": # 抖音APP分享的短鏈接 url = "https://v.douyin.com/RCxwDgH/" share_url = get_share_url(url) video_url = get_video_url(share_url) download_video(video_url) print("下載完成")
整理一下代碼,完整代碼如下:
import requestsimport jsonheaders = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3904.108 Safari/537.36",}def get_share_url(url): try: r = requests.get(url, headers=headers, allow_redirects=False) return r.headers["location"] except Exception as e: print("解析失敗") print(e) def get_video_url(url): if not url: return try: vid = url.split("/?")[0].split("video/")[1] xhr_url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={vid}" r = requests.get(xhr_url, headers=headers).json() video_url = r["item_list"][0]["video"]["play_addr"]["url_list"][0] return video_url except Exception as e: print("解析失敗") print(e) def download_video(url, name): if not url: return try: r = requests.get(url, headers=headers) with open(name + ".mp4", "wb") as f: f.write(r.content) print("下載完成") except Exception as e: print("下載失敗") print(e) if __name__ == "__main__": # 抖音APP分享的短鏈接 url = "https://v.douyin.com/RCxwDgH/" name = "video2" share_url = get_share_url(url) video_url = get_video_url(share_url) download_video(video_url, name) print("Finished")
運行代碼,可以成功解析并下載到無水印視頻。
在這個爬蟲的研究過程中,讓我有幾點收獲,跟大家分享一下
網(wǎng)址重定向問題,可以在 requests.get
函數(shù)中,設(shè)置參數(shù) allow_redirects=False
來禁止重定向,這樣我們可以細(xì)致的了解到 url 請求的整個過程。
headers
中的 user-agent
不同,獲取到的數(shù)據(jù)可能也不同,本文的爬蟲即是這樣,使用 PC瀏覽器和手機(jī)瀏覽器的 UA
,會跳轉(zhuǎn)至不同的頁面。
如果文章中有哪里沒有講明白,或者講解有誤的地方,歡迎在評論區(qū)批評指正,或者掃描下面的二維碼,加我微信,大家一起學(xué)習(xí)交流,共同進(jìn)步。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/124099.html
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:比如分鐘破譯朋友圈測試小游戲文章里用的方法但有些根本就沒有提供網(wǎng)頁端,比如今年火得不行的抖音。所以常用的方式就是通過在電腦上裝一些抓包軟件,將手機(jī)上的網(wǎng)絡(luò)請求全部顯示出來??偨Y(jié)下,重點是的抓取,關(guān)鍵是配置代理證書,難點是對請求的分析。 爬蟲的案例我們已講得太多。不過幾乎都是 網(wǎng)頁爬蟲 。即使有些手機(jī)才能訪問的網(wǎng)站,我們也可以通過 Chrome 開發(fā)者工具 的 手機(jī)模擬 功能來訪問,以便...
摘要:所以我們就要通過抓包工具來獲取到請求與響應(yīng)的信息。關(guān)于抓包工具有等。中的可以根據(jù)自己要爬取的用戶更改,可以通過把用戶分享到微信,然后在瀏覽器中打開鏈接,在打開的中可以看到用戶的。運行后就可以得到視頻列表有任何疑問,歡迎加我微信交流。 APP抓包 前面我們了解了一些關(guān)于 Python 爬蟲的知識,不過都是基于 PC 端瀏覽器網(wǎng)頁中的內(nèi)容進(jìn)行爬取?,F(xiàn)在手機(jī) App 用的越來越多,而且很多也...
摘要:仿抖音短視頻小程序開發(fā)一項目的簡介仿抖音短視頻小程序開發(fā)二項目功能分析與具體實現(xiàn)源代碼仿抖音短視頻小程序開發(fā)全棧式實戰(zhàn)項目短視頻后臺管理系統(tǒng)小程序的后臺管理系統(tǒng)涉及的技術(shù)??蚣芤挥脩袅斜淼墨@取與分頁前端代碼用戶列表展示的表格底部 SpringBoot 仿抖音短視頻小程序開發(fā)(一):項目的簡介(https://segmentfault.com/a/11...SpringBoot 仿抖音短...
摘要:我發(fā)現(xiàn)抖音上很多小姐姐就拍個跳舞的視頻就火了,大家是沖著舞蹈水平去的嗎,都是沖著顏值身材去的,能刷到這篇文章的都是了,我就跟大家不一樣了,一個個刷太麻煩了,我直接爬下來看個夠,先隨意展示兩個。 我發(fā)現(xiàn)抖音上很多小姐姐就拍個跳舞的視頻就火了,大家是沖著舞蹈水平去的嗎,都是沖著顏值身材去的,能刷...
閱讀 3031·2023-04-25 18:00
閱讀 2244·2021-11-23 10:07
閱讀 4088·2021-11-22 09:34
閱讀 1261·2021-10-08 10:05
閱讀 1584·2019-08-30 15:55
閱讀 3452·2019-08-30 11:21
閱讀 3361·2019-08-29 13:01
閱讀 1399·2019-08-26 18:26