2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python

这里以鞠婧祎的个人主页为demo

https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz

【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意

找到接口

找到https://www.douyin.com/aweme/v1/web/aweme/post/路劲的接口

image-20231104230515850

预览响应数据, 应该是能跟所发布视频的描述所对应的就OK, 但是只只有18条数据

余下的数据, 滚动进度条的时候就会出来了

接口整整37个参数, 随便改一个都会导致请求不到数据(返回状态码200, 但就是没数据), 没想到解决办法…

image-20231104230815754

将返回的数据保存到json文件中

image-20231104231435708

下载视频

import requests
import json
import os# todo 错误处理
def download_video(url, path):print('\n开始下载视频...', path.split('/')[-1])r = requests.get(url, stream=True)with open(path, 'wb') as f:# 进度条total_length = int(r.headers.get('content-length'))print('视频大小:', total_length)for chunk in r.iter_content(chunk_size=1024 * 1024):if chunk:f.write(chunk)# 打印进度条print('\r' + '[下载进度]:%s%.2f%%' % ('>' * int((f.tell() / total_length) * 50), float(f.tell() / total_length) * 100), end='')index = 0# json_file, 接口返回的json文件位置
# save_file_dir, 保存视频的文件夹路径
def save_video_batch(json_file, save_file_dir):global indexif not os.path.exists(save_file_dir):os.makedirs(save_file_dir)# 读取json文件with open(json_file, 'r', encoding='utf-8') as f:json_data = json.load(f)aweme_list = json_data['aweme_list']for aweme in aweme_list:video_url_list = aweme['video']['play_addr']['url_list']video_name = aweme['desc']# 一个视频有三个地址, 成功一个就breakindex += 1for video_url in video_url_list:# print(video_url)try:download_video(video_url, f'{save_file_dir}{index}-{video_name}.mp4')breakexcept Exception as e:print('下载失败')save_video_batch('../params/鞠婧祎主页.json', '../data/鞠婧祎主页/')

下载结果

image-20231104232212786

某音反爬感觉做的很好, 好难爬…

尝试直接去获取html页面, 解析html页面, 但是获取的html页面并不是实际浏览器中浏览的页面(不是验证码界面我看了)

请求接口也是, API调试工具中能请求到, 但是使用代码就不行了, 也是返回200状态, 但是没有数据, 下面是代码, 不知道缺了什么

(有些我觉得敏感的数据, 需要自己替换)

import requestsheaders = {'authority': 'www.douyin.com','accept': 'application/json, text/plain, */*','accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','cache-control': 'no-cache','cookie': 'cookie',   # 替换自己的cookie'pragma': 'no-cache','referer': 'https://www.douyin.com/user/MS4wLjABAAAA0W6MrnV7YIYmneCLCypeKVoZj4VDk9amQorNZ8aIVfs','sec-ch-ua': '"Chromium";v="118", "Microsoft Edge";v="118", "Not=A?Brand";v="99"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76',
}params = (('device_platform', 'webapp'),('aid', '6383'),('channel', 'channel_pc_web'),('sec_user_id', 'MS4wLjABAAAA0W6MrnV7YIYmneCLCypeKVoZj4VDk9amQorNZ8aIVfs'),('max_cursor', '1696500302000'),('locate_query', 'false'),('show_live_replay_strategy', '1'),('need_time_list', '0'),('time_list_query', '0'),('whale_cut_token', ''),('cut_version', '1'),('count', '18'),('publish_video_strategy_type', '2'),('pc_client_type', '1'),('version_code', '170400'),('version_name', '17.4.0'),('cookie_enabled', 'true'),('screen_width', '1707'),('screen_height', '1067'),('browser_language', 'zh-CN'),('browser_platform', 'Win32'),('browser_name', 'Edge'),('browser_version', '118.0.2088.76'),('browser_online', 'true'),('engine_name', 'Blink'),('engine_version', '118.0.0.0'),('os_name', 'Windows'),('os_version', '10'),('cpu_core_num', '16'),('device_memory', '8'),('platform', 'PC'),('downlink', '10'),('effective_type', '4g'),('round_trip_time', '50'),('webid', '7297499797400897065'),('msToken', 'xxx'),  # 替换token('X-Bogus', 'xxx'),  # 替换
)response = requests.get('https://www.douyin.com/aweme/v1/web/aweme/post/', headers=headers, params=params)
# 响应200, 
print(response.status_code)
# 但是没有数据
print(response.text)

现在的方法还很麻烦, 有待改进,

设想我只需要输入主页的url地址, 比如https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz, 自动下载主页中所有视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/160508.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebGL:基础练习 / 简单学习 / demo / canvas3D

一、前置内容 canvas:理解canvas / 基础使用 / 实用demo-CSDN博客 WebGL:开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗_webgl培训-CSDN博客 二、在线运行HTML 用来运行WebGL代码,粘贴--运行&#xff…

【JMeter】插件管理工具

1. 官方下载地址 Documentation :: JMeter-Plugins.org 2.安装 将该插件的jar包移动到lib/ext下 3.重启JMeter就可以看到插件管理器 4. 安装,更新,删除插件 安装插件 删除插件 更新插件

【Java】三种方案实现 Redis 分布式锁

序言 setnx、Redisson、RedLock 都可以实现分布式锁&#xff0c;从易到难得排序为&#xff1a;setnx < Redisson < RedLock。一般情况下&#xff0c;直接使用 Redisson 就可以啦&#xff0c;有很多逻辑框架的作者都已经考虑到了。 方案一&#xff1a;setnx 1.1、简单实…

九、W5100S/W5500+RP2040树莓派Pico<SNTP 获取网络时间>

文章目录 1 前言2 协议简介2.1 什么是SNTP2.2 SNTP的优点2.3 SNTP原理2.4 应用场景 3 WIZnet以太网芯片4 SNTP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着科技的不断进步和应用需求的不断变…

虚拟dom及diff算法之 —— h函数和diff函数

新虚拟dom和老虚拟dom进行diff算法&#xff08;精细化比较&#xff09;&#xff0c;算出如何最小量更新&#xff0c;最后反映到真实dom上 diff是发生在虚拟dom上的 模板编译 虚拟dom如何产生 - 渲染函数&#xff08;h函数&#xff09; h函数产生虚拟节点&#xff08;vnode&a…

Linux: MV指令(覆盖替换重命名)

MV指令 mv [-bfiuv] [–help] [–version] [-S <附加字尾>] [-V <方法>] [源文件或目录] [目标文件或目录]-b 若需覆盖文件&#xff0c;则覆盖前先行备份-f 若目标文件或目录与现有的文件或目录重复&#xff0c;则直接覆盖现有的文件或目录-i 覆盖前先行询问用户–…

【LeetCode刷题-队列】--2073.买票需要的时间

2073.买票需要的时间 方法一&#xff1a;使用队列 class Solution {public int timeRequiredToBuy(int[] tickets, int k) {Queue<TicketBuyer> queue new LinkedList<>();for(int i 0;i<tickets.length;i){TicketBuyer buyer new TicketBuyer();buyer.inde…

快速了解推荐引擎检索技术

目录 一、推荐引擎和其检索技术 二、推荐引擎的整体架构和工作过程 &#xff08;一&#xff09;用户画像 &#xff08;二&#xff09;文章画像 &#xff08;三&#xff09;推荐算法召回 三、基于内容的召回 &#xff08;一&#xff09;召回算法 &#xff08;二&#xf…

linux基础学习

迷茫不可怕&#xff0c;说明你还在向前走 失败不可怕&#xff0c;只要你还能爬起来 ​​​​​​​ 目录 ​编辑 为什么要学习linux操作系统&#xff1f; linux系统的安装 FinalShell 虚拟机快照 第二章 基本知识 linux目录结构 linux路径的描述方式 linux命令入门…

【C语言进阶】之动态内存管理笔试题及柔性数组

【C语言进阶】之动态内存管理笔试题 1.动态内存管理笔试题汇总1.1第一道题1.2第二道题1.3第三道题1.4第四道题 2.C/C内存管理3.柔性数组3.1什么是柔性数组3.2柔性数组的使用3.2柔性数组的优点 &#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f680; 欢迎关注&#xff1a…

【已解决】设置SSH主机:VS Code-正在本地下载 VS Code 服务器

问题描述 很简单&#xff0c;就是我电脑强制重启之后用vscode再去连服务器&#xff0c;发现连不上了 解决办法 如上图&#xff0c;点击重试按钮&#xff0c;下面的这些东西就可以复制粘贴了 ctrf查找commit&#xff0c;这个时候就能找到一串d037ac076cee195194f93ce6fe2bdfe296…

Spring Security OAuth 2.0 资源服务器— JWT

目录 一、JWT的最小依赖 二、JWT的最基本配置 1、指定授权服务器 2、初始预期&#xff08;Startup Expectations&#xff09; 3、运行时预期&#xff08;Runtime Expectations&#xff09; 三、JWT认证是如何工作的 四、直接指定授权服务器 JWK Set Uri 五、提供 audie…