大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码
环境使用:
-
Python 3.10 解释器
-
Pycharm 编辑器
模块使用:
-
requests >>> 数据请求 第三方模块 pip install requests <工具>
win + R 输入cmd 输入安装命令 pip install -i 镜像源网址 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)
-
re <正则表达式模块>
实现案例思路: 批量采集数据
一. 数据来源分析
-
明确需求: 明确采集的网站以及数据内容
-
网址: https://www.huya.com/video/play/933940354.html
-
数据: 视频标题 / 视频内容 <主要数据>
-
-
抓包分析: 浏览器开发者工具去抓包
-
打开开发者工具: F12 / 右键点击检查选择network (网络)
-
刷新网页: 网页相关数据内容
-
通过关键字去搜索找到对应的数据包位置
搜索: M3U8 -> getMomentContent
数据包地址: https://liveapi.huya.com/moment/getMomentContent
-
二. 代码实现步骤
-
发送请求 -> 模拟浏览器对于url地址发送请求
-
获取数据 -> 获取服务器返回响应数据
-
解析数据 -> 提取视频标题 / 链接
-
保存数据 -> 获取视频数据保存本地文件夹里面
<单页> 多个视频采集 --> 500页数据 * 20 = 10000条内容
分析请求链接变化规律
-
https://liveapi.huya.com/moment/getMomentContent?videoId=933940354&uid=&_=1700050245436
-
https://liveapi.huya.com/moment/getMomentContent?videoId=933613712&uid=&_=1700052358713
videoId -> 视频ID
uid -> 时间戳 表示请求网页时间节点 <可以固定不变 也可以通过time模块获取当前时间戳>
-
只需要找到所有视频ID就可以了
无论是什么ID 图片 章节ID 视频ID 音频ID --> 都能在目录页面获取到
单个下载
'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 导入数据请求模块 <需要安装>
import requests
# 导入正则表达式模块 <内置模块>
import re
“”"
发送请求 -> 模拟浏览器对于url地址发送请求
-
基本代码都可以直接在开发者工具中复制
-
模拟浏览器: 字典数据 <需要构建完整键值对>
开发者工具: 标头(headers) -> 请求标头(request headers)
-
-
response = requests.get(url=url, headers=headers)
调用requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头
最后有用自定义变量名response接收返回数据
-
<Response [200]> 响应对象 表示请求成功了
Response: 响应
<> : 表示对象
200: 状态码表示请求成功
“”"
# 模拟浏览器
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
url = f'https://liveapi.huya.com/moment/getMomentContent?videoId=904494849&uid=&_=1700050245436'
# 发送请求
response = requests.get(url=url, headers=headers)
'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
“”"
获取数据 -> 获取服务器返回响应数据
-
response.json() 获取响应json数据
报错了: Expecting value: line 1 column 1 (char 0)
原因: 返回数据不是完整json数据格式
解决一:
-
查看返回数据具体情况
xxx({数据})
-
在请求链接中删掉一个参数: callback <适用于大部分情况>
解决二:
直接获取响应文本数据, 通过正则表达式提取数据内容
-
-
response.text 获取响应文本数据
“”"
json_data = response.json() # json() 括号里面不需要加东西
“”"
解析数据 -> 提取视频标题 / 链接
字典数据类型:
内置函数: type() 查看数据类型
字典键值对取值, 提取数据内容: 根据冒号左边的内容[键], 提取冒号右边的内容[值]
列表取值: 索引位置 <整型>
“”"
# 提取标题
title = json_data['data']['moment']['title']
# 提取视频链接
video_url = json_data['data']['moment']['videoInfo']['definitions'][0]['url']
“”"
保存数据 -> 获取视频数据保存本地文件夹里面
图片 视频 音频 --> 我们拿到都是链接, 实际需要内容
-
需要对于链接发送请求, 获取二进制数据
-
‘video\’ 表示你要保存的位置
-
title 视频文件名
-
‘.mp4’ 文件格式
-
wb 保存方式 w写入 b二进制 <二进制保存>
-
“”"
'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 获取视频内容
video_content = requests.get(url=video_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='wb') as f:
# 写入数据
f.write(video_content)
print(title, video_url)
批量下载
# 导入数据请求模块 <需要安装>
import requests
# 导入正则表达式模块 <内置模块>
import re
# 模拟浏览器
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
for page in range(2, 501):
print(f'===============正在采集第{page}页的数据内容===============')
# 请求网址
link = f'https://www.huya.com/video/g/all?set_id=51&order=hot&page={page}'
# 发送请求
response = requests.get(url=link, headers=headers)
# 获取响应文本数据
html_data = response.text
video_id_list = re.findall('<li data-vid="(\d+)">', html_data)
# for 循环遍历, 提取列表里面元素
for video_id in video_id_list:
# 请求网址
url = f'https://liveapi.huya.com/moment/getMomentContent?videoId={video_id}&uid=&_=1700050245436'
# 发送请求
response = requests.get(url=url, headers=headers)
json_data = response.json() # json() 括号里面不需要加东西
# 提取标题
title = json_data['data']['moment']['title']
# 提取视频链接
video_url = json_data['data']['moment']['videoInfo']['definitions'][0]['url']
# 获取视频内容
video_content = requests.get(url=video_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='wb') as f:
# 写入数据
f.write(video_content)
print(title, video_url)
效果展示
尾语
好了,今天的分享就差不多到这里了!
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!