为防下架,我把虎*牙舞蹈小姐姐视频批量下载啦~

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

环境使用:

  • Python 3.10 解释器

  • Pycharm 编辑器

模块使用:

  • requests >>> 数据请求 第三方模块 pip install requests <工具>

    win + R 输入cmd 输入安装命令 pip install -i 镜像源网址 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)

  • re <正则表达式模块>

实现案例思路: 批量采集数据

一. 数据来源分析
  1. 明确需求: 明确采集的网站以及数据内容

    • 网址: https://www.huya.com/video/play/933940354.html

    • 数据: 视频标题 / 视频内容 <主要数据>

  2. 抓包分析: 浏览器开发者工具去抓包

    • 打开开发者工具: F12 / 右键点击检查选择network (网络)

    • 刷新网页: 网页相关数据内容

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

      搜索: M3U8 -> getMomentContent

      数据包地址: https://liveapi.huya.com/moment/getMomentContent

二. 代码实现步骤
  1. 发送请求 -> 模拟浏览器对于url地址发送请求

  2. 获取数据 -> 获取服务器返回响应数据

  3. 解析数据 -> 提取视频标题 / 链接

  4. 保存数据 -> 获取视频数据保存本地文件夹里面

<单页> 多个视频采集 --> 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地址发送请求

  • 基本代码都可以直接在开发者工具中复制

    1. 模拟浏览器: 字典数据 <需要构建完整键值对>

      开发者工具: 标头(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数据格式

    解决一:

    1. 查看返回数据具体情况

      xxx({数据})

    2. 在请求链接中删掉一个参数: 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)

效果展示


尾语

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀👇👇👇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值