Python:只需20行代码,一键下载网络热门短剧,简直不要太爽!

news2024/9/21 2:38:08

网络短剧铺天盖地,主打的就是一个爽字,但有有些博主就是不当人,喜欢一剪没,正当我们看的津津有味的时候,进度条却到底了!!!


对于大家来说,想看续集,都是全凭实力刷续集。

如果这时候你会Python的话,那就不会有这些烦恼了,只需20行代码,分分钟下载全集!


话不多说,我们直接开整!

准备工作

环境使用
Python 3.10 (不一定3.10,只要不是Python2就行)
Pycharm

模块使用
requests >>> pip install requests

为了让大家更好的学会这个案例,小编加班熬夜录制了详细的视频讲解,跟源码一起打包好了,直接下方扫码自取。

爬虫源码已经打包好了,朋友们如果需要可以威x信扫描下方二维码免费获得【保证100%免费】

在这里插入图片描述

案例实现的基本流程

一、数据来源分析

1.明确需求

明确采集的网站以及数据内容

  • 网址: https://www.kuaishou.com/short-video/3xhnk9shm4dzy6i?streamSource=theater¤tPc ursor=27&tubeId=5x4jwip27r8g6wg&thirdTab=%E4%BB%8A%E6%97%A5%E6%9C%80%E7% 83%AD&fromPage=theater&fromChannal=0

  • 数据: 视频内容 (链接)

2.抓包分析

通过浏览器开发者工具分析对应数据位置

 pc端: 网页浏览器自带开发者工具抓包分析   
 app: 利用第三方抓包工具去分析数据位置
  • 打开开发者工具

  • F12 / 右键点击检查选择network(网络)

  • 刷新网页

  • 让本网页的数据内容重新加载一遍

  • 通过关键字搜索找到对应数据位置

  • 通过链接中一段进行搜索

  • 关键字: 需要什么数据就搜什么数据

项目对于视频网站数据采集

开发者工具 -> 网络 -> 媒体文件 -> 对应视频链接

数据包地址: https://www.kuaishou.com/graphql

二、代码实现步骤

1.发送请求

模拟浏览器对于url地址发送请求

模拟浏览器

一种简单反反爬手段: 相关参数内容可以复制  
	 -开发者工具 -> 网络 -> 点击对应数据包 -> 标头 -> 请求标头  
代码格式:  字典形式  
    -需要构建完整的键值对  
字典形式:  
	dit = {'key': 'value', 'key1': 'value1'}  
		  -key键  
		  -value值  
		  'key': 'value' 键值对  

请求网址

刚刚通过抓包分析找到链接地址

发送请求

一般情况: 使用第三方模块 requests

  • 请求方法: 在对应数据包中 -> 标头 -> 常规 -> 请求方法

  • POST

  • 请求参数:

  • POST请求: 需要传递表单数据 (载荷中查看)

2.获取数据

获取服务器返回响应数据
response.text

  • 获取响应文本数据 -> 字符串

  • 一般情况在获取网页源代码的时候


response.json()

  • 获取响应json数据 -> 字典

  • 必须是完整的json数据格式

response.content

  • 获取响应二进制数据 -> 二进制

  • 一般用于获取图片/视频/音频/特定格式文件… 数据内容的时候

    采集视频: 视频地址  
             对于视频地址发送请求 -> 获取二进制数据进行相关数据保存  
    
    

3.解析数据
提取我们需要的数据内容字典取值

一般获取json数据, 可能存在多层嵌套  
	dit = {'key': 'value', 'key1': 'value1'}  
	json = {'A': '1', 'B': {'B1': '2', 'B3': '3'}}  
键值对取值: 根据冒号左边的内容[键], 提取冒号右边的内容[值]  
	一层一层提取  
比如提取数字3: json['B']['B3'] -> '3'  

4.保存数据

获取视频内容, 进行本地保存

相对路径: 相当于代码所在文件路径 -> video 代码文件目录video文件夹
绝对路径: c盘->文件夹->那个文件路径

三、批量采集

分析请求链接或者参数变化规律

代码展示

# 导入数据请求模块  
import requests  
# 导入文件操作模块  
import os  
# 定义文件夹名字  
file = 'video'  
# 判断文件夹是否存在  
if not os.path.exists(file):  
    # 创建文件夹  
    os.mkdir(file)  
"""发送请求"""  
# 模拟浏览器  
headers = {  
    # User-Agent 用户代理, 表示浏览器基本上身份信息  
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'  
}  
for page in range(28):  
    try:  
        # 请求网址  
        url = 'https://www.kuaishou.com/graphql'  
        # 请求参数  
        data = {"operationName":"visionTubeEpisodeQuery","variables":{"tubeId":"5x4jwip27r8g6wg","episodeNumber":page,"page":"theater","channelId":0},"query":"fragment photoContent on PhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment feedContent on Feed {\n  type\n  author {\n    id\n    name\n    headerUrl\n    following\n    headerUrls {\n      url\n      __typename\n    }\n    __typename\n  }\n  photo {\n    ...photoContent\n    ...recoPhotoFragment\n    __typename\n  }\n  canAddComment\n  llsid\n  status\n  currentPcursor\n  tags {\n    type\n    name\n    __typename\n  }\n  __typename\n}\n\nquery visionTubeEpisodeQuery($tubeId: String, $episodeNumber: Int, $page: String, $channelId: Int, $webPageArea: String) {\n  visionTubeEpisode(tubeId: $tubeId, episodeNumber: $episodeNumber, page: $page, channelId: $channelId, webPageArea: $webPageArea) {\n    ...feedContent\n    result\n    status\n    __typename\n  }\n}\n"}  
        # 发送请求  
        response = requests.post(url=url, json=data, headers=headers)  
        """获取数据"""  
        # 获取响应的json数据  
        json_data = response.json()  
        """解析数据"""  
        # 提取视频链接  
        video_url = json_data['data']['visionTubeEpisode']['photo']['photoUrl']  
        # 提取短剧名  
        title = json_data['data']['visionTubeEpisode']['tags'][2]['name']  
        print(title)  
        print(video_url)  
        """保存数据"""  
        # 获取视频内容  
        video_content = requests.get(url=video_url, headers=headers).content  
        # 数据保存 w写入数据覆盖 b二进制 wb二进制保存 ()  
        with open('video\\' + title + str(page) + '.mp4', mode='wb') as f:  
            # 写入数据  
            f.write(video_content)  
    except:  
        pass

如果你是准备学习Python或者正在学习(想通过Python兼职),下面这些你应该能用得上:

【点击这里】领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程 ,手机也能学习
历年互联网企业Python面试真题,复习时非常方便
————————————————
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣第560题 和为k的子数组

前言 记录一下刷题历程 力扣第560题 和为k的子数组 和为k的子数组 原题目:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums …

源码分析:LinkedList

一、LinkedList 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。 不过,我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且&#x…

7-8 哈利·波特的考试

题意简述: 给一个图,求一个点,该点离其他点最小距离的最大值 最小。 输入样例: 6 11 3 4 70 1 2 1 5 4 50 2 6 50 5 6 60 1 3 70 4 6 60 3 6 80 5 1 100 2 4 60 5 2 80输出样例: 4 70 注意:0x3f不能写在判断里面,…

【大模型训练】Flash Attention详解

文章目录 前言预备知识FlashAttention1传统Attention计算方式FlashAttention1的基本原理除去Softmax操作的分块计算Softmax分块计算Attention分块计算 FlashAttention2参考资料 前言 FlashAttention系列工作,是一种加速注意力计算方法,目前已经应用在&a…

解决TensorFlow-GPU安装错误:Python版本兼容性与环境配置问题

创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力! 从错误信息中可以看到,tensorflow-gpu 安装时出现了 packaging.requirements.InvalidRequirement 错误,具体是因为解析 Python 版本时出现了问题。这通常是由于环…

OpenAI全新发布o1模型:开启 AGI 的新时代

OpenAI全新发布o1模型:开启 AGI 的新时代 欢迎关注【youcans的AGI学习笔记】原创作品 2024年9月13日,OpenAI新模型o1 正式发布。o1 在测试化学、物理和生物学专业知识的基准 GPQA-diamond 上,全面超过了人类博士专家。 OpenAI 宣称&#xff…

CANFD芯片应用中关键功能和性能指标分析

CAN FD芯片通信速率高达5Mbps,需要线缆少传输距离较远,在汽车、工业、宇航、能源等领域应用越来越广。 1)汽车工业:汽车内部电子系统日益复杂,需要高速、可靠的数据传输来确保车辆的安全和性能。CAN FD通信提供了更高…

R数据对象快速保存与读取:qs包

qs:R对象的快速序列化 qs是一个R语言包,使用qs可以快速地从磁盘中保存和读取对象。** 它的主要目的是替换R中的saveRDS和readRDS函数,提供了一个更加快速而完整的数据读写方法。 ** 受到fst的启发,qs通过lz4/zstd库使用了类似的块…

人工智能和机器学习:探讨人工智能和机器学习的最新发展、应用、挑战和未来趋势

人工智能和机器学习是当前科技领域的热点话题,其最新发展、应用、挑战和未来趋势备受关注。 最新发展: 人工智能和机器学习技术在近年来得到了快速发展,尤其是深度学习技术的广泛应用。例如,深度学习在图像识别、语音识别、自然语…

docker入门安装及使用

docker概述 docker是一种容器技术,它提供了标准的应用镜像(包含应用和应用多需要的依赖),因此,我们可以非常轻松的在docker中安装应用,安装好的应用相当于一个独立的容器 如下图所示,为docker中…

机器学习文献|基于循环细胞因子特征,通过机器学习算法预测NSCLC免疫治疗结局

今天我们一起学习一篇最近发表在Journal for immunotherapy of cancer (IF 10.9)上的文章,Machine learning for prediction of immunotherapeutic outcome in non-small-cell lung cancer based on circulating cytokine signatures[基于循环…

制证书、制电子印章、签章 -- 演示程序说明

ofd签章系统涉及证书的制作、电子印章制作、签章、验章等环节。关于ofd签章原理,本人写过多篇文章进行了阐述; 见文章《ofd板式文件 电子签章实现方法》、《一款简单易用的印章设计工具》、《签章那些事 -- 让你全面了解签章的流程》。 为了进一步加深对签章过程的理…

基于Spring Security OAuth2认证中心授权模式扩展

介绍 Spring Security OAuth2 默认实现的四种授权模式在实际的应用场景中往往满足不了预期。 需要扩展如下需求: 手机号短信验证码登陆微信授权登录 本次主要通过继承Spring Security OAuth2 抽象类和接口,来实现对oauth2/token接口的手机号短信的认证…

GD32F4开发 -- FATFS移植

之前已经讲了 GD32F4开发 – FATFS文件系统 现在将其一直到我的工程。 一、移植 在工程里创建FATFS文件夹。 移植正点原子 实验39 FATFS实验里的代码。 移植完后如下图: 注意:ffconf.h文件,找到对应宏并按照需求修改。 二、创建 FATFS 分…

最新中科院预警名单发布,多本高分区期刊被标记“On hold”(附20-24年所有名单)

2024年2月,期刊分区表团队发布2024年度《国际期刊预警名单 》。 最新版的《国际期刊预警名单》共有24本期刊,较23年版本的28本减少了4本,全部预警期刊当中,医学类数量最多,达11本。期刊JOURNAL OF BIOMATERIALS AND T…

高效率免费创作文章,4款ai写作生成器来帮忙

高效率免费创作文章,这对于每个创作者来说是非常不错的方法,即能提高创作效率,而且还能节省文章创作成本,但是想要高效率免费创作我们就需要找到相应的ai写作生成器来帮忙。因为如果是人工创作文章就需要耗费时间成本与人力成本的…

在pycharm终端中运行pip命令安装模块时,出现了“你要如何打开这个文件”弹出窗口,是什么状况?

这种情况发生在Windows系统上,当在PyCharm终端中运行pip命令安装模块时,如果系统无法确定要使用哪个程序打开该文件,就会出现“你要如何打开这个文件”弹出窗口。 解决方法是: 选择“查找一个应用于此文件”的选项。在弹出的窗口…

C++与C语言的区别

前言 本文主要用C语言和C做对比来学习C,便于个人理解。C包含C语言,是对C语言的扩展,在C中,支持C语言的语法使用,C是C语言的超集 一、C与C语言的区别 C语言简单高效,适合低级系统编程和硬件相关的开发。…

揭秘Web3新纪元:算力共享平台如何重塑数字世界的力量源泉

目录 一、Web3:算力共享的新舞台 二、技术革新:解锁算力的无限潜能 三、应用场景:算力如何改变世界 四、未来展望:算力共享的无尽可能 在区块链技术的浪潮中,Web3.0的曙光正引领我们迈向一个前所未有的数字时代。而在这场变革的洪流中,基于Web3的算力共享平台犹如一股…

Redis集群_主从复制

Redis集群基本概念 在实际项目中,一般不会只在一台机器上部署redis服务器,因为单台redis服务器不能满足高并发的压力,另外如果该服务器或者redis失效,整个系统就可能崩溃项目里一般会用主从复制的模式来提升性能,用集…