python带你获取视频及弹幕数据~知识点满满(含完整源代码)

前言

嗨喽!大家好呀,这里是魔王~**
在这里插入图片描述
在这里插入图片描述


模块安装问题:

如果安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
  2. 在pycharm中点击Terminal(终端) 输入安装命令

如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径

pycharm如何安装插件?

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
  3. 选择相应的插件点击 install(安装) 即可
  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效

如何配置 ffmpeg

一. 左侧主页加我领取相应的安装包

二. 解压文件, 放到某一个文件夹(随意)

三. 配置环境变量

我的电脑(此电脑) 右键选择属性

在这里插入图片描述


选择高级系统设置

在这里插入图片描述


选择环境变量

在这里插入图片描述


复制你解压之后的ffmpeg路径

比如我的 C:\01-Software-installation\ffmpeg\ffmpeg\bin
在这里插入图片描述


点击选择path

在这里插入图片描述


选择新建, 粘贴ffmpeg路径

在这里插入图片描述
在这里插入图片描述


分析得到数据

一. 打开网页源代码

对视频详情页 鼠标右键选择网页源代码
在这里插入图片描述

二. 搜索关键词 playinfo

在这里插入图片描述

代码实现步骤

在这里插入图片描述

代码

# import time
#
# import requests  # 数据请求模块
# import re
# import json
# import pprint
# import subprocess
# import os
#
# for page in range(1, 12):
#     list_url = f'https://api.bilibili.com/x/space/arc/search?mid=1305006386&ps=30&tid=0&pn={
    
    page}&keyword=&order=pubdate&jsonp=jsonp'
#     headers = {
    
    
#         'cookie': 'buvid3=505115A6-48EA-0919-3209-465409AA992981053infoc; _uuid=636B74D9-E84A-F2104-1229-78C910BC64F5179787infoc; blackside_state=1; rpdid=|(kmJY|k))Ru0J\'uYR|mJYlY~; buvid4=5C79A8B4-7F25-78C9-2243-297FC69BBF1379004-022021019-1pW1w45e5faCG5mZBS0QBA%3D%3D; buvid_fp_plain=undefined; LIVE_BUVID=AUTO2716444930253540; i-wanna-go-back=-1; CURRENT_QUALITY=0; CURRENT_BLACKGAP=0; sid=642j26r0; fingerprint3=1d3f8d535d23a20df3fe7382671d115b; DedeUserID=523606542; DedeUserID__ckMd5=909861ec223d26d8; SESSDATA=4480157b%2C1661674553%2Cda993*31; bili_jct=4308a518638c20ee6db87b115cbe8609; fingerprint=d1e5f057d9a8561c03c59637ef5c6253; buvid_fp=d1e5f057d9a8561c03c59637ef5c6253; b_ut=5; nostalgia_conf=-1; innersign=1; PVID=2; b_lsid=44E1073DA_18065EFA270; bp_video_offset_523606542=653426892676792300; CURRENT_FNVAL=80',
#         'referer': 'https://www.bilibili.com/',
#         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
#     }
#     bv_list = requests.get(url=list_url, headers=headers).json()['data']['list']['vlist']
#     for index in bv_list:
#         # time.sleep(1)
#         bv_id = index['bvid']
#         title = index['title']
#         print(title, bv_id)
        # """
        # 1. 发送请求, 对于视频详情页url地址发送请求 https://www.bilibili.com/video/BV11b4y1S7Jq
        #     确定请求网址
        #     确定请求方式
        #     请求头伪装
        # 爬虫是模拟浏览器对于url地址发送请求, 然后再获取服务器返回响应数据
        # """
        # url = f'https://www.bilibili.com/video/{
    
    bv_id}'
        # # 请求头伪装代码, 为了防止被服务器识别出来是爬虫程序 user-agent 用户代理, 浏览器最基本身份信息
        # # 你得不到你想要数据, 服务器没有给你返回数据, 或者返回的数据不是你想要的
        # # referer 防盗链, 告诉服务器, 我们请求url地址是从哪里跳转过来的
        # # 通过requests这个模块里面get请求方法, 对于url地址发送请求 并且携带上headers请求头伪装, 最后用自定义变量response接收返回数据
        # response = requests.get(url=url, headers=headers)
        # # print(response)     # <Response [200]> 得到响应对象 200表示请求成功
        # """
        # 2. 获取数据, 获取响应体的文本数据 response.text 网页源代码
        #     response.json()  获取json字典数据
        #     response.content 获取二进制数据
        # """
        # # print(response.text)
        # """
        # 3. 解析数据, 提取我们想要的 视频标题/音频url/视频画面url
        #     用re正则表达...
        # 如何简单的使用正则
        #     1. 导入模块
        #     2. 去复制, 我们想要数据内容 <h1 id="video-title" title="每天一遍,防止早恋!" class="video-title">
        #     3. 使用re.findall() 方法 从什么地方, 去找什么数据   (.*?) 想要的数据, 就用括号.*?
        #     ['每天一遍,防止早恋!'] 列表   文本在python一般字符串数据
        #     ["每天一遍,防止早恋!"] 字符串
        #     正则匹配出来的数据, 返回是列表
        # """
        # title = re.findall('<h1 id="video-title" title="(.*?)" class="video-title">', response.text)[0].replace(' ', '')
        # play_info = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
        # json_data = json.loads(play_info)
        # # json 数据存储格式, 在python字典数据类型
        # # print(title)
        # # print(play_info)
        # # print(type(play_info))
        # # json_data = json.loads(play_info)
        # # print(json_data)
        # # print(type(json_data))
        # # pprint.pprint(json_data)  # 格式化输出
        # #  取值, 键值对取值, 根据冒号左边的内容[], 提取冒号右边的内容[]
        # audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
        # video_url = json_data['data']['dash']['video'][0]['baseUrl']
        # # 403 Forbidden 你没有访问权限, 403 加防盗链
        # print(title)
        # print(audio_url)
        # print(video_url)
        #
        # audio_content = requests.get(url=audio_url, headers=headers).content  # 音频二进制数据
        # video_content = requests.get(url=video_url, headers=headers).content  # 视频画面二进制数据
        # with open('video\\' + title + '.mp3', mode='wb') as f:
        #     f.write(audio_content)
        # with open('video\\' + title + '.mp4', mode='wb') as f:
        #     f.write(video_content)
        #
        #
        # COMMAND = f'ffmpeg -i video\\{
    
    title}.mp4 -i video\\{
    
    title}.mp3 -c:v copy -c:a aac -strict experimental video\\{
    
    title}output.mp4'
        # subprocess.run(COMMAND, shell=True)
        # os.remove(f'video\\{
    
    title}.mp3')
        # os.remove(f'video\\{
    
    title}.mp4')
        #
# 简单m3u8  复杂 m3u8 + AES加密 [JS逆向内容]
import re
import requests

for page in range(1, 30):
    url = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=138393844&date=2022-04-{
    
    page}'
    headers = {
    
    
        'cookie': 'buvid3=505115A6-48EA-0919-3209-465409AA992981053infoc; _uuid=636B74D9-E84A-F2104-1229-78C910BC64F5179787infoc; blackside_state=1; rpdid=|(kmJY|k))Ru0J\'uYR|mJYlY~; buvid4=5C79A8B4-7F25-78C9-2243-297FC69BBF1379004-022021019-1pW1w45e5faCG5mZBS0QBA%3D%3D; buvid_fp_plain=undefined; LIVE_BUVID=AUTO2716444930253540; i-wanna-go-back=-1; CURRENT_QUALITY=0; CURRENT_BLACKGAP=0; sid=642j26r0; fingerprint3=1d3f8d535d23a20df3fe7382671d115b; DedeUserID=523606542; DedeUserID__ckMd5=909861ec223d26d8; SESSDATA=4480157b%2C1661674553%2Cda993*31; bili_jct=4308a518638c20ee6db87b115cbe8609; fingerprint=d1e5f057d9a8561c03c59637ef5c6253; buvid_fp=d1e5f057d9a8561c03c59637ef5c6253; b_ut=5; nostalgia_conf=-1; innersign=1; PVID=2; b_lsid=44E1073DA_18065EFA270; bp_video_offset_523606542=653426892676792300; CURRENT_FNVAL=80',
        'referer': 'https://www.bilibili.com/',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    # print(response.text)
    content_list = re.findall(':(.*?)@', response.text)
    for content in content_list:
        print(content[1:])
        with open('弹幕.txt', mode='a', encoding='utf-8') as f:
            f.write(content[1:])
            f.write('\n')

尾语

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

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

猜你喜欢

转载自blog.csdn.net/python56123/article/details/124452289