首页 > 编程语言 >使用python爬取B站视频

使用python爬取B站视频

时间:2022-12-28 17:32:19浏览次数:46  
标签:__ 视频 python 爬取 url video data response

B站之所以火,是因为趣味与知识并存。正如一句“你在B站看番,我在B站学习”,B站还是有一些质量比较好的学习视频。当你在B站上看到喜欢的视频想保存下来时,怎么办呢?


我相信很多逛B站的朋友,心中多多少少都有一种感觉,那就是对B站的依赖,一天不打开看几次,心中总觉得缺了些什么;我逛B站也有两年的时间了,可实话说,现在的我早已不知道自己逛B站到底是为了看什么,没什么明确的目的,反正是,我就是要逛B站...


被生活压榨的现代社会青年,每天疲惫过后,手机、互联网成了一个寻找慰藉的最佳场所,看自己喜欢的电影、电视节目,网络上没有人认识,言行举止几乎没有约束,可以通过评论、互动来得到参与感,以显示自己的存在,所寻求的不过是看似有些病态实则再正常不过的另类情感宣泄罢了;


可就是在这样的环境中,人们通过虚拟的互动,却往往能找到他自己心中认为的“知己”,有着共同的爱好,能互相探讨的情感交流,甚至是高度契合的世界观,网络上空间距离的保护让人会更加无保留的表达与释放自己,而B站,就是载体。


当然,事物总有两面性,尤其是在B站这么一个龙蛇混杂的网络“空间”,B站不会十全十美,但是,你总会找到你喜欢的up主,找到爱看的电视电影、剧评影评、游戏体验、生活体验等等。


B站每天同时在线几百万人,对我而言,它让我这个生活孤独的人感觉到了一丝丝的归属感,我无聊的时候,这一丝丝归属感就是我的生活。


说了那么多,引入今天的话题,爬取 B站 的视频,因为代码没什么难度,具体的实现依据下面的步骤来实现。


  • 分析数据来源(视频一般都是流媒体  通过抓包工具解析)
  • 通过视频播放详情页发送请求,获取网页源代码
  • 获取数据下载地址 提取视频标题、视频播放地址、音频地址
  • 存储数据、把视频音频合并到一起


具体请看代码:

# coding:utf-8
# __auth__ = "maiz"
# __date__ = "2021/6/27"


import json
import re
import requests


# 1.分析数据来源 (通过抓包工具发现一堆m4?e的包和 data:image/svg +xml image是图片的意思应该不是需要的 m4?e打开是一堆乱码 搞不懂只能试试看是不是这个
# 找到页面源码的地址 用search查找m4?e前面相同的部分


html_url = "https://www.bilibili.com/video/BV1nq4y177iF"
cookie = """_uuid=DAA18F27-6BFA-2E38-BC4C-F60C4AF0599081540infoc; buvid3=E6E47A83-F53F-44A1-82F2-AB97DF02A8FF34763infoc; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(J|YJkmul|~0J'uYkJYJ~YJ); buvid_fp=E6E47A83-F53F-44A1-82F2-AB97DF02A8FF34763infoc; bsource=search_baidu; sid=hugiee8z; PVID=2; fingerprint=0acd05e7bcca97693925ee707a38da32; buvid_fp_plain=E6E47A83-F53F-44A1-82F2-AB97DF02A8FF34763infoc; DedeUserID=349902220; DedeUserID__ckMd5=3e8ad8f940acac21; SESSDATA=1f0328c2,1639207924,8d916*61; bili_jct=4f54db114f0e72caf3d13f5645ceecc4"""


headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
"Referer": "https://www.bilibili.com/", # 防盗链 告诉服务器你从哪里发送的请求
"cookie": cookie
}




def get_response(url):
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response
except:
print(url + "请求失败")
return None




def get_video_info(html_url):
response = get_response(html_url)
title = re.findall(r'<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>', response.text)[0]
html_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>', response.text)[0]
# print(html_data)
# 将字符串转换成字典
json_data = json.loads(html_data)
# json字典根据键值对取值
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
video_info = [title, audio_url, video_url]
return video_info




def save(title, audio_url, video_url):
# 保存视频、音频 图片 都是二进制数据
audio_url_content = get_response(audio_url).content
video_url_content = get_response(video_url).content
with open(title+".mp3", "wb") as f:
f.write(audio_url_content)
with open(title+".mp4", "wb") as f_1:
f_1.write(video_url_content)
print(title+"视频内容保存完成")




if __name__ == '__main__':
video_info = get_video_info(html_url)
save(video_info[0], video_info[1], video_info[2])



标签:__,视频,python,爬取,url,video,data,response
From: https://blog.51cto.com/u_15924937/5975842

相关文章

  • Python 爬取人人视频
    hello,小伙伴们,又见面了,距离上一次发布文章的时间,也算是久别重逢了。期间也发生了很多的事情,导致博文断更,也是笔者不愿意的,但是确实是比较忙,不再过多赘述,希望大家能够体谅。......
  • Python爬取快手博主所有视频
    随着互联网经济的快速发展和自媒体行业的普及,越来越多的视频创作者加入了短视频平台,不仅快速的推动了短视频平台行业的发展,也给大众带来了更多新鲜有趣的知识和内容。据最新......
  • sublime安装REPL无法执行python3.7版本
    一、下载sublime最新版本地址:SublimeText-TextEditing,DoneRight单击DOWNLOADFORWINDOWS需要等一会儿自己就下载了。  安装就是下一步就可以了。二、安装......
  • python 使用thread多线程执行耗时代码
    python使用thread多线程执行耗时代码1、引入所需要的包importqueueimportthreadingimporttraceback2、定义线程类:classThreadService(threading.Thread):  de......
  • Python对象的比较和拷贝
    Python对象的比较和拷贝本文内容存在主观理解,详细请查阅官网文档比较(==VSis)==操作符是比较对象的值是否相等,而is比较的事对象的身份标识是否相等,即它们是否是同一......
  • tensorflow_probability.python.bijectors的一些使用
      网上见到一个TensorFlow的代码,没见过这个形式的,是概率编程的代码:#coding=utf-8#Copyright2020TheTF-AgentsAuthors.##LicensedundertheApacheLicens......
  • python中global 和 nonlocal 的作用域
    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量。一globalglobal关键字用来在函数或其他局部作用域中使用全局变量。......
  • 【leetcode】3: 无重复字串的最长子串(python)
    给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3......
  • [oeasy]python0033_回车_carriage_return_figlet_字体变大
    回到开头回忆上次内容进程前后台切换<kbd>ctrl</kbd>+<kbd>z</kbd>把当前进程切换到后台并暂停​​jobs​​查看所有作业用​​fg​​可以把后台进程再切回前台​​......
  • python logging配置
    python中,logging由logger,handler,filter,formater四个部分组成。logger是提供我们记录日志的方法;handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加......