栏目介绍如何爬取视频

相关免费学习推荐:

本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流。好了多了就不多说了喜欢的朋有可以收藏,转发请复原文链接谢谢

一、环境准备

我这里使用的是环境如下仅供参考:

开发工具: pycharm

python环境:python-3.8.0

依赖的包: shutil,os,re,json,choice,requests,lxml

二、页面分析

我在这里就拿前段时间非常火的马老师的视频来举例子吧。

视频链接: https://www.bilibili.com/video/BV1Ef4y1i78b?from=search&seid=12072538764197074893视频链接解析 我们这里只需要 BV1Ef4y1i78b 也就是 video后面? 号前面

第二部分抓包,哔哩哔哩这里的视频被分成多个小段了经过看源码分析后我们可以解析

分析返回json中的具体内容

返回给我们的们如下,真正对我们有用的信息在data中

在data 下面我们就可以清晰的看到我们想要的内容了,如视频的画质,以及视频的地址等,注意:如果你拿到地址直接进行访问的话是访问不到了,哔哩哔哩中添加了Referer如果你直接在浏览器访问是没有Referer的是找不到页面的。

我们需要解析的内容如下:视频的时长

视频的质量

视频的URL

音频的URL

音频和视频合并

三、代码实操

3.1 准备工作

依赖的包import jsonimport osimport reimport shutilimport sslimport timeimport requestsfrom concurrent.futures import ThreadPoolExecutorfrom random import choicefrom lxml import etree

添加请求头和随机用户代理#设置请求头等参数,防止被反爬headers = {

'Accept': '*/*',

'Accept-Language': 'en-US,en;q=0.5',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}def get_user_agent():

'''获取随机用户代理'''

user_agents = [

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",

"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",

"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",

"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",

"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",

"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",

"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",

"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",

"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",

"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",

"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",

"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",

"MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",

"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",

"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36",

"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20",

"Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",

"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

]

# 在user_agent列表中随机产生一个代理,作为模拟的浏览器

user_agent = choice(user_agents)

return user_agent

3.2 编写下载代码def single_download(aid, acc_quality):

'''单个视频实现下载'''

# 请求视频链接,获取信息

origin_video_url = 'https://www.bilibili.com/video/' + aid

res = requests.get(origin_video_url, headers=headers)

html = etree.HTML(res.text)

title = html.xpath('//*[@id="viewbox_report"]/h1/span/text()')[0]

print('您当前正在下载:', title)

video_info_temp = re_video_info(res.text, '__playinfo__=(.*?)

video_info = {}

# 获取视频质量

quality = video_info_temp['data']['accept_description'][acc_quality]

# 获取视频时长

video_info['duration'] = video_info_temp['data']['dash']['duration']

# 获取视频链接

video_url = video_info_temp['data']['dash']['video'][acc_quality]['baseUrl']

# 获取音频链接

audio_url = video_info_temp['data']['dash']['audio'][acc_quality]['baseUrl']

# 计算视频时长

video_time = int(video_info.get('duration', 0))

video_minute = video_time // 60

video_second = video_time % 60

print('当前视频清晰度为{},时长{}分{}秒'.format(quality, video_minute, video_second))

# 调用函数下载保存视频

download_video_single(origin_video_url, video_url, audio_url, title)

3.3 编写下载代码def download_video_single(referer_url, video_url, audio_url, video_name):

'''单个视频下载'''

# 更新请求头

headers.update({"Referer": referer_url})

print("视频下载开始:%s" % video_name)

# 下载并保存视频

video_content = requests.get(video_url, headers=headers)

print('%s\t视频大小:' % video_name, round(int(video_content.headers.get('content-length', 0)) / 1024 / 1024, 2), '\tMB')

received_video = 0

with open('%s_video.mp4' % video_name, 'ab') as output:

headers['Range'] = 'bytes=' + str(received_video) + '-'

response = requests.get(video_url, headers=headers)

output.write(response.content)

# 下载并保存音频

audio_content = requests.get(audio_url, headers=headers)

print('%s\t音频大小:' % video_name, round(int(audio_content.headers.get('content-length', 0)) / 1024 / 1024, 2), '\tMB')

received_audio = 0

with open('%s_audio.mp4' % video_name, 'ab') as output:

headers['Range'] = 'bytes=' + str(received_audio) + '-'

response = requests.get(audio_url, headers=headers)

output.write(response.content)

received_audio += len(response.content)

print("视频下载结束:%s" % video_name)

video_audio_merge_single(video_name)

3.4 将下载好的音频和视频合并def video_audio_merge_single(video_name):

'''使用ffmpeg单个视频音频合并'''

print("视频合成开始:%s" % video_name)

import subprocess

command = 'ffmpeg -i %s_video.mp4 -i %s_audio.mp4 -c copy %s.mp4 -y -loglevel quiet' % (

video_name, video_name, video_name)

subprocess.Popen(command, shell=True)

print("视频合成结束:%s" % video_name)

3.4 运行测试

4.总结

好了到这里我们就成功爬取出哔哩哔哩中的视频了,如果小伙感觉那里有不懂的地方或者有疑惑的地方可以后台留言,我这边为你解答。相关免费学习推荐:(视频)

以上就是介绍Python爬取哔哩哔哩视频的详细内容,更多请关注随便开发网其它相关文章!

python 软件开发 哔哩哔哩_介绍Python爬取哔哩哔哩视频相关推荐

  1. python后端开发工作内容怎么写_【Python后端开发岗位职责_Python后端开发职责/工作内容】-猎聘岗位职责频道...

    python后端开发工程师 深圳市超频三科技股份有限公司 深圳市超频三科技股份有限公司,超频三,超频三科技,超频三 职责: 1.负责集成各种维度的数据源,使用各种数据获取技巧,转换.分析.调度.存储数 ...

  2. php获取哔哩哔哩追番_Ajax介绍及爬取哔哩哔哩番剧索引追番人数排行

    Ajax,是利用JavaScript在保证页面不被刷新,页面链接不改变的情况下与服务器交换数据并更新部分网页的技术.简单的说,Ajax使得网页无需刷新即可更新其内容.举个例子,我们用浏览器打开新浪微博 ...

  3. python网页开发实现本地上传_树莓派 python 如何将本地文件上传到指定的服务器页面上...

    展开全部 以下是单个文件的,不2113确定你的文件夹是什么意5261思,4102可以压缩下再上传(方1653法一样,调用zip命令) 我的实现方法:调用终端的curl,以下为代码平片段,实现的功能是上 ...

  4. python黑客库长安十二时辰 更新_程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!...

    该剧总体评价如何? 优酷给<长安十二时辰>打出了8.8的高分(首播时为9.0分).该剧在豆瓣.IMDB.时光网等平台分别收获了8.6.8.5.8.4分,这足以说明该剧总体评价还是不错的. ...

  5. python实现对文本内容的修改_介绍python对文件操作实现全文或单行替换

    python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开.替换文本中的taste 为 tastingYesterday when ...

  6. python能做软件开发吗-学习Python软件开发能做什么?

    原标题:学习Python软件开发能做什么? 近年来,Python语言可以说是快速抢占了人们的眼球.它以其代码简短.可读性强.适合迅速开发而广泛应用等优点让许多学员想要学习,很多人会问,学习python ...

  7. 如何用python爬取视频_介绍Python爬取哔哩哔哩视频

    python视频教程栏目介绍如何爬取视频 本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流.好了 ...

  8. python软件开发的一般流程-Python各个岗位的开发流程

    根据张大美女提供资料微修改,在这谢谢张大美女! 1.python软件开发工程师 1.1 项目启动会 说明项目目标.阶段划分.组织结构.管理流程等关键事项. 1.2 需求调研 由用户提出,描述产品的功能 ...

  9. python价格趋势软件_2020年软件开发走势,阿里巴巴吧推荐的Python学习视频,Python势如破竹!...

    2020年软件开发走势,阿里巴巴吧推荐的Python学习视频,Python势如破竹! 2020-11-22 22:17:25 软件开发外包分为成品开发和定制开发.众所周知,价格差距很大,因为软件开发产 ...

最新文章

  1. alloc 和 init都做了什么验证。
  2. 用lemon测交互题
  3. Windows服务器上Mqtt服务器EMQX的安装使用
  4. (转)MySQL索引原理及慢查询优化
  5. BootStrap 杂记
  6. 关于SQLserver 的windows验证
  7. POJ - 1966 Cable TV Network(最小割-最大流)
  8. 让VS2010添加新类时自动添加public关键字(来自dudu博文)
  9. “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)
  10. [转]微信小程序 c#后台支付结果回调
  11. HDU1198-----并查集
  12. 佛说剖腹产的孩子_选择好的剖腹产时间会改变孩子的命运吗?
  13. python 数据挖掘论文_基于python的WEB数据挖掘技术实现与研究
  14. 苏亚星显示没有登录的服务器,苏亚星机房管理系统
  15. java订餐管理系统
  16. Dtcms修改PC站分享到手机端后访问打开手机版的当前页面
  17. 2021年,交通·未来系列线上公益学术活动重新起航~
  18. C++下实现全连接神经网络
  19. [CF1383A]String Transformation 1
  20. Altium Designer重拾之学习资料推荐

热门文章

  1. 为什么计算机与打印机不同网络,几台电脑不同,可以连同一台打印机吗?
  2. JetBrains公司系列IDE开发工具通用初始配置推荐(Android Studio、InterlliJ、PHPStorm、CLion、Webstorm等)
  3. Ai challenger 2017 image caption小结
  4. 米思齐学习例程(一):LED闪烁
  5. 深拷贝和浅拷贝开发常用方法总结
  6. 【徕卡全站仪Geocom开发】开发日志#03
  7. 计算机知识大讲堂,电脑硬件基础知识 大讲堂
  8. linux lvm分区教程,Linux LVM入门使用教程
  9. 还原巴菲特的部分真相(中)
  10. Node.js基础汇总(一):什么是Node.js,创建最简单的Node.js应用,NPM介绍,安装express模块