ghgxj

成果展示

在这里插入图片描述

视频下载

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

分类:

技术点:

相关文章: