【python】抖音無水印短視頻批量爬蟲


成果展示

在這里插入圖片描述

視頻下載

爬取的100個視頻:https://ghgxj.lanzous.com/b08xszm0h

項目場景

抖音【喜歡】這一欄收藏了很多視頻,如下圖,共有4691個,如何批量下載下來?
在這里插入圖片描述

預備知識

只下載單個視頻其實是不難的,可以參考我的這篇文章:

【python】15行代碼下載抖音無水印短視頻

1、運行下方代碼:

import re, json, requests
from tqdm import tqdm # 打印進度條的庫
inp = input('請輸入復制的抖音分享鏈接:')  # 如:https://v.douyin.com/JVFp8r5/
url = re.findall('https://v.douyin.com/.*?/', inp)[0]  # 鏈接解析
res = requests.get(url)
vid = re.findall('/video/(.*?)/', res.url)[0]  # vid解析,vid就是視頻id,是我自己定義的
api = f'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={vid}' # 調用api
res = requests.get(api).json()
url = res['item_list'][0]['video']['play_addr']['url_list'][0]  # 視頻下載鏈接解析
url = url.replace('/playwm/', '/play/')  # 去水印
res = requests.get(url, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
with open(f'{vid}.mp4', 'wb') as f:
    for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):
        f.write(chunk)

2、輸入抖音短視頻分享鏈接

不用考慮我的感受 我沒感受 不用和我說對不起 反正下次還是對不起  https://v.douyin.com/JVccx8h/ 復制此鏈接,打開抖音搜索,直接觀看視頻!

在這里插入圖片描述
3、就能將視頻下載到本地了
在這里插入圖片描述

批量爬取

下載單個視頻的時候,我們是通過復制分享視頻鏈接來實現的,如何批量獲取視頻鏈接呢?總不能一個一個點吧,【喜歡】里面總共有4691個視頻,一個一個用手點肯定是不行的。這里我就想到了用Fiddler Everywhere來對抖音APP進行抓包。

抓包結果如下:
在這里插入圖片描述
【喜歡】的api接口是:

https://aweme.snssdk.com/aweme/v1/aweme/favorite/

返回的是json數據:
在這里插入圖片描述
請求參數有很多,但每次改變的只有這4個參數:

count
max_cursor:
ts
_rticket

其中,count是返回的視頻數量,max_cursor首次請求時為0,往后請求的值為上一次的返回值。ts和_rticket目前還不知道怎么解析,不過應該是通過某種加密方式計算出來的。所以目前是項目是卡在這里,如果以后有解決辦法會再更新的。

溫馨提示

因為api接口有些參數目前還尚未解析,所有我就手動復制了返回的幾個json數據,然后運行下方代碼下載:

import os, json, requests
from tqdm import tqdm

def down(name, link):
    res = requests.get(link)
    with open(name, 'wb') as f:
        f.write(res.content)

def main():
    root = 'favorite/'
    os.makedirs(root, exist_ok=True)
    with open('favorite.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    for item in tqdm(data['aweme_list']):
        name = root+item['aweme_id']+'.mp4'
        link = item['video']['play_addr']['url_list'][0]
        down(name, link)

main()

順便一提

其實我也用appium嘗試過,但【喜歡】里面視頻播放時竟然捕捉不到元素

from appium import webdriver
import time

# 連接手機抖音
caps = {
    "platformName": "Android",
    "deviceName": "emulator-5554",
    "platformVersion": "6.0.1",
    "appPackage": "com.ss.android.ugc.aweme",
    "appActivity": ".main.MainActivity",
    "noReset": "True",
    "unicodeKeyboard": "True",
    "resetKeyboard": "True"
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)

# 爬抖音喜歡的視頻數據
time.sleep(5)
print('點擊我')
driver.find_elements_by_id('com.ss.android.ugc.aweme:id/h3f')[4].click()
time.sleep(5)
print('點擊喜歡')
driver.find_elements_by_id('com.ss.android.ugc.aweme:id/g1c')[2].click()
time.sleep(5)
print('打開視頻')
driver.find_elements_by_id('com.ss.android.ugc.aweme:id/a2z')[0].click()
time.sleep(5)
print('點擊分享')
driver.find_element_by_id('com.ss.android.ugc.aweme:id/gh0').click()
time.sleep(5)
driver.swipe(500, 1300, 0, 1300)
time.sleep(5)
print('點擊復制鏈接')
# 下方代碼或報錯,因為獲取不到元素,hhh
driver.find_elements_by_id('com.ss.android.ugc.aweme:id/gg1')[-3].click()
time.sleep(1)
print(driver.get_clipboard_text())

在這里插入圖片描述

相關推薦

【python】15行代碼下載抖音無水印短視頻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM