【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行代码下载抖音无水印短视频

posted @ 2020-12-15 19:53  XavierJ  阅读(1361)  评论(0编辑  收藏  举报