一個價值百萬的思路,如何下載去水印視頻
今天跟大家聊一個價值百萬的思路
短視頻如今非?;馃幔瑹o論是微博、Twitter、還是知乎、微信,這些網站都在往短視頻方向傾斜,抖音、快手就更不用說了。
來看一個網站

這是一個下載Twitter視頻的工具。
你知道它的流量有多恐怖嗎?月PV是900萬,靠Adsense廣告收入每月幾千美刀。

采集twitter視頻對一個做爬蟲的程序員來說,技術難度幾乎為零。缺的是對用戶痛點的把握。
今天分享個類似的思路
我們下載的抖音短視頻默認都是帶水印的。
Google搜索“抖音去水印”一共有500多萬條記錄和相關搜索內容

這已經不是一個小眾需求,對搬運工來說是剛需!因為他們都喜歡將沒有水印的視頻搬到另一個地方去。
那么如何下載去水印視頻呢?網上有不少教程,不過很多早就過時無法用了。今天教大家找到一個通用的方法來獲取抖音去水印短視頻。
我們從抖音APP復制某個視頻的鏈接后,在瀏覽器打開后,就會看到視頻請求的接口。
仔細觀察就會發(fā)現(xiàn)里面包含有一個視頻播放的URL

將該鏈接復制出來
https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fe70000br155v26tgq06h08e0lg&ratio=720p&line=0%E2%80%8B
瀏覽器打開發(fā)現(xiàn)其實這是個帶有水印的視頻
有人說,把鏈接里面的playwm替換成play就是去水印的版本,因為wm表示water mask,表示水印的意思。
如果你按照該操作打開鏈接的話,發(fā)現(xiàn)是一篇空白。

其實這里還少個步驟,你要把瀏覽器切換成手機模式,就是說user-agent切換成移動設備。

切換后就會重定向到新的鏈接,這個鏈接就是去水印的地址
思路通了之后,剩下的就是用代碼來實現(xiàn)了
思考2小時,代碼半小時
部分核心代碼:
import re
from urllib.parse import urlparse
import requests
from toolhub import utils
class DY(object):
def __init__(self, app=None):
self.app = app
if app is not None:
self.init_app(app)
self.headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'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'
}
self.domain = ['www.douyin.com',
'v.douyin.com',
'www.snssdk.com',
'www.amemv.com',
'www.iesdouyin.com',
'aweme.snssdk.com']
def init_app(self, app):
self.app = app
def parse(self, url):
share_url = self.get_share_url(url)
share_url_parse = urlparse(share_url)
if share_url_parse.netloc not in self.domain:
raise Exception("無效的鏈接")
dytk = None
vid = re.findall(r'\/share\/video\/(\d*)', share_url_parse.path)[0]
match = re.search(r'\/share\/video\/(\d*)', share_url_parse.path)
if match:
vid = match.group(1)
response = requests.get(share_url, headers=self.headers, allow_redirects=False)
match = re.search('dytk: "(.*?)"', response.text)
if match:
dytk = match.group(1)
if vid and dytk:
return self.get_data(vid, dytk)
else:
raise Exception("解析失敗")
def get_share_url(self, url):
response = requests.get(url,
headers=self.headers,
allow_redirects=False)
if 'location' in response.headers.keys():
return response.headers['location']
else:
raise Exception("解析失敗")
def get_data(self, vid, dytk):
url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={vid}&dytk={dytk}"
response = requests.get(url, headers=self.headers, )
result = response.json()
if not response.status_code == 200:
raise Exception("解析失敗")
item = result.get("item_list")[0]
author = item.get("author").get("nickname")
mp4 = item.get("video").get("play_addr").get("url_list")[0]
cover = item.get("video").get("cover").get("url_list")[0]
mp4 = mp4.replace("playwm", "play")
res = requests.get(mp4, headers=self.headers, allow_redirects=True)
mp4 = res.url
desc = item.get("desc")
mp3 = item.get("music").get("play_url").get("url_list")[0]
data = dict()
data['mp3'] = mp3
data['mp4'] = mp4
data['cover'] = cover
data['nickname'] = author
data['desc'] = desc
data['duration'] = utils.format_duration(item.get("duration"))
return data
dy = DY()
if __name__ == '__main__':
dy = DY()
data = dy.parse("https://v.douyin.com/oXbjfe/")
import pprint
pprint.pprint(data)
最后來看看效果:

完整代碼可以直接在github下載:https://github.com/lzjun567/python_scripts/blob/master/douyin.py
這個思路值一百萬嗎?當然還不行。
你要把它最終變成一個工具,讓小白點點按鈕就能獲取去水印的鏈接才能發(fā)揮出它真正的價值。
剩下的事情你只要把它包裝成一個網站或者小程序,抑或是可供下載的軟件,然后就可以躺著掙錢了。
最后,就看你的執(zhí)行力了!

由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:
(1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。
(2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。
感謝支持,比心。
感谢您访问我们的网站,您可能还对以下资源感兴趣:
国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频