找回密码
  注册[Register]
查看: 278|回复: 6

[python] B站视频爬取

[复制链接]
发表于 2022-6-1 07:41 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

[Python] 纯文本查看 复制代码
import json
import os.path
import re
import subprocess
 
import requests
 
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62',
    'referer': 'https://www.bilibili.com/'
}
 
 
def main(url):
    # 获取页面html代码
    resp = requests.get(url=url, headers=headers)
    html_code = resp.text
    # 解析标题
    title = re.findall('<h1 id="video-title" title="(.*?)" class="video-title">', html_code)[0]
    # 解析播放地址
    play_info = re.findall('<script>window.__playinfo__=(.*?)</script>', html_code)[0]
    print(title)
    print(play_info)
    json_data = json.loads(play_info)
    # 获取音频地址
    audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
    print(audio_url)
    # 获取视频地址  默认最清晰
    video_url = json_data['data']['dash']['video'][0]['baseUrl']
    print(video_url)
    audio_resp = requests.get(url=audio_url, headers=headers, stream=True)
    if not os.path.exists('movie'):
        os.mkdir('movie')
    with open(f'movie/{title}.mp3', mode='wb') as f:
        for audio_data in audio_resp.iter_content(10240):
            f.write(audio_data)
    video_resp = requests.get(url=video_url, headers=headers, stream=True)
    with open(f'movie/{title}.mp4', mode='wb') as f:
        for video_data in video_resp.iter_content(10240):
            f.write(video_data)
    command = f'D:/JetBrains/ffmpeg-5.0.1/ffmpeg-5.0.1-essentials_build/bin/ffmpeg -i movie/{title}.mp4 -i movie/{title}.mp3 -c:v copy -c:a aac -strict experimental movie/{title}-merger.mp4'
    print(command)
    subprocess.run(command, shell=True)
 
 
if __name__ == '__main__':
    main('https://www.bilibili.com/video/BV1LY4y187ii')

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-6-1 07:41 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-6-1 07:48 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-6-1 08:30 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-6-1 08:46 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-6-1 08:46 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-6-1 12:38 | 显示全部楼层
顶帖是一种态度,也是一种尊重。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-4 15:30 , Processed in 0.036835 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表