-
2020-06-26 20:27:47
今天有点闲,想着爬取一下哔哩哔哩的视频练练手.
说干就干!打开B站,搜索"鸡你太美",大叔就是这么潮流,哈哈.废话不多说,吭哧吭哧开始肝.
F12—>Network—>一无所获.
在我的理解中,视频应该有个访问连接的呀,而且放在json格式的文件中,这样我们直接访问资源URL就可以下载到视频了呀.
然而,并没有.
接下里就是长达四五个小时的文献参考以及试错.
在网上看到的都是从up主个人主页里下载视频的,和我的预期有些不符,所以我们就先看前辈们的资料吧.
我们来到一个up主的个人中心,开始吭哧吭哧.
这里,我用了fiddler,太难了…
没错,就是这个"点击倾听,他们与B站的故事!"我怎么都没找到他在网页的布局.这里先挖个坑.
然后接着吭哧吭哧,找我们的视频URL
接着我就找到了这个,但是,里面并没有视频连接,只有title以及一些图片的URL.到这里,我就有点慌了,因为这里已经超出我的估计了.一般思维,我们视频对应的部分应该就有视频URL了啊.怀着忐忑的心情,我继更多相关内容 -
python爬取b站视频
2021-09-18 10:47:09") 五:使用方法步骤: (1):打开bilibili想要下载的视频,复制视频连接: 如下图红框内链接: (2):运行代码: 输入下载类型: 1:表示bilibili up主视频 2:表示up主选集视频,类似于各种教程选集视频 3:表示电视剧,动漫...一: 运行代码需要的安装的模块:
import aiohttp import requests from lxml import etree import re import pyperclip import asyncio import aiofiles import os import os.path
二:运行的代码需要安装的外置工具:
(1):cmd命令音频视频合成工具:ffmpeg
下载网址: Download FFmpeg
http://www.ffmpeg.org/download.html (2):解压到某个目录,并添加到环境变量中
示例:
解压到D盘根目录:
D:/ffmpeg
则需要添加环境变量:D:/ffmpeg/bin
三:需要在代码所在目录创建的文件夹:
(1): bilibili视频
(2):在"bilibi视频"这个文件夹下载创建下面两个文件夹:
up视频
电视剧视频
四:代码
import aiohttp import requests from lxml import etree import re import pyperclip import asyncio import aiofiles import os import os.path def conbine(title_name, Class): title_new = title_name + 'c' if Class == 3: os.system(f'ffmpeg -i {title_new}.mp4 -i {title_new}.mp3 -c copy bilibili视频/电视剧视频/{title_name}.mp4') elif Class == 1 or 2: os.system(f'ffmpeg -i {title_new}.mp4 -i {title_new}.mp3 -c copy bilibili视频/up视频/{title_name}.mp4') def delete(title_name): title_new = title_name + 'c' os.remove(title_new + '.mp4') os.remove(title_new + '.mp3') async def download(i, url, title_name, headers2): title_new = title_name + 'c' async with aiohttp.ClientSession(headers=headers2) as session: async with session.get(url) as resp: data = await resp.content.read() if i == 0: filename = f'./{title_new}.mp4' elif i == 1: filename = f'./{title_new}.mp3' async with aiofiles.open(filename, mode='wb') as f: await f.write(data) async def asyncmake(video_url, audio_url, title_name, headers2): urls = [video_url, audio_url] tasks = [] for i in range(0, 2): d = asyncio.create_task(download(i, urls[i], title_name, headers2)) tasks.append(d) await asyncio.wait(tasks) if __name__ == "__main__": url = str(pyperclip.paste()) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", "cookie": "_uuid=1A1B677B-6311-4E06-9BDA-D06081D8740275362infoc; buvid3=6E8BD183-ADF3-4D9B-8714-C157F73620CC34773infoc; sid=ab95r294; fingerprint=8f4236095f9ce06ad4c94e22f8be2c3a; buvid_fp=6E8BD183-ADF3-4D9B-8714-C157F73620CC34773infoc; buvid_fp_plain=1F0F89A8-01C5-4175-8F28-7E203E65FE7334767infoc; DedeUserID=306269459; DedeUserID__ckMd5=a7388eef56c50e08; SESSDATA=2833875d%2C1638683753%2C8d0ed*61; bili_jct=c6f37eedd1ca8195a83acf9076d81243; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(k|)Yk|)|~l0J'uYkJuJu~Yu; CURRENT_QUALITY=80; LIVE_BUVID=AUTO8916234196752032; PVID=3; bp_video_offset_306269459=537685465433229330", "Referer": "https://www.bilibili.com/video/BV1jV411n7qa?p=4" } response = requests.get(url, headers=headers) data = response.text html_obj = etree.HTML(data) print("'1':表示bilibili up主视频\n'2':表示up主选集视频\n'3':表示电视剧类型") Class = int(input("请输入下载类型:")) if Class == 1: title_name = html_obj.xpath('//*[@id="viewbox_report"]/h1/span/text()')[0] url_str = html_obj.xpath('/html/head/script[5]/text()')[0] video_url = re.findall(r'video":\[{"id":\d+,"baseUrl":"(.*?)"', url_str)[0] audio_url = re.findall(r'audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_str)[0] print(title_name + " 正在下载中!!!") elif Class == 2: title_name1 = html_obj.xpath('//*[@id="viewbox_report"]/h1/span/text()')[0] title_name2 = url.split('?')[1] title_name = title_name1 + title_name2 url_str = html_obj.xpath('/html/head/script[5]/text()')[0] video_url = re.findall(r'video":\[{"id":\d+,"baseUrl":"(.*?)"', url_str)[0] audio_url = re.findall(r'audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_str)[0] print(title_name + " 正在下载中!!!") elif Class == 3: title_name = html_obj.xpath("/html/head/title/text()")[0] title_name = title_name.split('_')[0] print(title_name + " 正在下载中!!!") url_str = html_obj.xpath('/html/body/script[3]/text()')[0] video_url = \ re.findall(r'video":\[{"start_with_sap":\d+,"bandwidth":\d+,"sar":"\d+:\d+","backupUrl":\["(.*?)"', url_str)[0] audio_url = \ re.findall(r'audio":\[{"start_with_sap":\d+,"bandwidth":\d+,"sar":"","backupUrl":\["(.*?)"', url_str)[0] # 发送请求获取响应 headers2 = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", "Referer": url } loop = asyncio.get_event_loop() loop.run_until_complete(asyncmake(video_url, audio_url, title_name, headers2)) conbine(title_name, Class) delete(title_name) print("下载完成!!!")
五:使用方法步骤:
(1):打开bilibili想要下载的视频,复制视频连接:
如下图红框内链接:
(2):运行代码:
输入下载类型:
1:表示bilibili up主视频
2:表示up主选集视频,类似于各种教程选集视频
3:表示电视剧,动漫视频,类似名侦探柯南,下载哪集复制哪集的链接 (vip视频暂时下载不 来,有更厉害的大佬能下载的话欢迎留言).
六:运行代码,视频下载成功:
七:查看视频:
视频下载到了创建的up视频文件夹里了:
使用视频播放器进行播放就可以观看了!!!
八:观看视频:
有大佬建议欢迎留言哦!!!
-
Python如何实现爬取B站视频
2021-01-20 00:00:165月3日晚,央视在《新闻联播》前播放了B站青年宣言片《后浪》,这是B站首次登陆央视黄金时段,今天在朋友圈陆续看到相关的视频。最早用B站的同学都知道,B站是和A站以异曲同工的鬼畜视频及动漫,进入到大众视野的... -
Python如何爬取b站热门视频并导入Excel
2020-09-16 09:57:26主要介绍了Python如何爬取b站热门视频并导入Excel,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
解决使用python爬取b站视频并使用ffmepg把音频和视频合成失败
2021-08-18 12:00:07首先我们需要下载ffmepg,并且配置环境变量 ...在python代码中,我们使用subprocess开启一个cmd线程,然后执行ffmpeg将音频和视频合成在一起的指令 COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_首先我们需要下载ffmepg,并且配置环境变量
-
把下载下来的文件中的bin文件夹的路径添加到Path中
-
然后打开Anaconda Prompt,使用命令conda install ffmpeg安装ffmpeg
-
使用 ffmpeg -version查看下载到的ffmpeg
-
在python代码中,我们使用subprocess开启一个cmd线程,然后执行ffmpeg将音频和视频合成在一起的指令
COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}out.mp4 ' subprocess.Popen(COMMAND, shell=True)
-
然而,有时候却输出不了合成后的视频,经过研究之后发现,原来是B站视频中有的视频标题最后会使用空格符号,使得cmd命令无法正确执行,因此,我在这里使用正则表达式将爬取到的视频标题当中的所有标点符号替换为空,此时就可以正确的输出合并后的视频
# 使用正则表达式将标题当中的所有标点符号替换为空 title = re.sub('\W+', '', title).replace("_", '') # 使用正则表达式将标题当中的所有标点符号替换为空,防止执行ffmpeg合并视频和音频时输出视频失败 video_name = re.sub('\W+', '', video_name).replace("_", '')
-
爬取B站视频和音频并将视频和音频合并的源代码如下
import requests import re import json import pprint # 格式化输出 import subprocess import os # path = './videos' # # if not os.path.exists(path): # os.mkdir(path) def get_response(html_url): headers = { 'referer': 'https://www.bilibili.com/', # 防止反爬 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.73' } response = requests.get(url=html_url, headers=headers) return response def get_video_info(html_url): response = get_response(html_url) title = re.findall(r'<h1 title="(.*?)" class="video-title">', response.text)[0] html_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>', response.text)[0] # 正则匹配式匹配出来的数据是列表 # 把字符串转为json数据 json_data = json.loads(html_data) # pprint.pprint(json_data) # 数据解析 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): # 保存数据 # 使用正则表达式将标题当中的所有标点符号替换为空 title = re.sub('\W+', '', title).replace("_", '') audio_content = get_response(audio_url).content video_content = get_response(video_url).content with open(title + '.mp3', mode='wb') as fp: fp.write(audio_content) with open(title + '.mp4', mode='wb') as fp: fp.write(video_content) print('视频内容保存完毕') def merge_data(video_name): '''数据的合并''' # 使用正则表达式将标题当中的所有标点符号替换为空,防止执行ffmpeg合并视频和音频时输出视频失败 video_name = re.sub('\W+', '', video_name).replace("_", '') print('视频合成开始:', video_name) COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}out.mp4 ' subprocess.Popen(COMMAND, shell=True) print('视频合成结束:', video_name) url = 'https://www.bilibili.com/video/BV1y541157e4' video_info = get_video_info(url) save(video_info[0], video_info[1], video_info[2]) merge_data(video_info[0])
-
-
Python爬取B站视频,只需一个B站视频地址,即可任意下载
2020-12-18 20:13:01B站是国内知名的视频弹幕网站,有最及时的动漫新番,ACG氛围,最有创意的Up主。站点中的视频数据分成了视频画面和音频数据。 今天带大家下载以及合并B站的视频。 Python 数据分析入门案例讲解 ...前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
B站是国内知名的视频弹幕网站,有最及时的动漫新番,ACG氛围,最有创意的Up主。站点中的视频数据分成了视频画面和音频数据。
今天带大家下载以及合并B站的视频。
Python 数据分析入门案例讲解
https://www.bilibili.com/video/BV1LX4y1u7VA
环境介绍:
- python 3.6
- pycharm
- requests
- re
- json
- subprocess
解析网页
目标网页分析
B站的视频和音频是分开的,音频url和视频url都在<script>window.__playinfo__=</script> 里面
提取数据
1、正则匹配提取数据
2、正则提取出数据为一个列表,通过列表取值,取出
3、字符串转json数据
4、通过字典取值的方式,提取视频url以及音频url
爬虫代码
导入工具
import requests import re # 正则表达式 import pprint import json import subprocess
请求头
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
请求数据
def send_request(url): response = requests.get(url=url, headers=headers) return response
解析视频数据
def get_video_data(html_data): """解析视频数据""" # 提取视频的标题 title = re.findall('<span class="tit">(.*?)</span>', html_data)[0] # print(title) # 提取视频对应的json数据 json_data = re.findall('<script>window\.__playinfo__=(.*?)</script>', html_data)[0] # print(json_data) # json_data 字符串 json_data = json.loads(json_data) pprint.pprint(json_data) # 提取音频的url地址 audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0] print('解析到的音频地址:', audio_url) # 提取视频画面的url地址 video_url = json_data['data']['dash']['video'][0]['backupUrl'][0] print('解析到的视频地址:', video_url) video_data = [title, audio_url, video_url] return video_data
保存数据
def save_data(file_name, audio_url, video_url): # 请求数据 print('正在请求音频数据') audio_data = send_request(audio_url).content print('正在请求视频数据') video_data = send_request(video_url).content with open(file_name + '.mp3', mode='wb') as f: f.write(audio_data) print('正在保存音频数据') with open(file_name + '.mp4', mode='wb') as f: f.write(video_data) print('正在保存视频数据')
数据的合并
def merge_data(video_name): print('视频合成开始:', video_name) # ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4 COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental output.mp4' subprocess.Popen(COMMAND, shell=True) print('视频合成结束:', video_name)
效果图
合并视频与音频
这里使用到一个工具<ffmpeg>,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
下载之后解压即可,但是需要你设置环境变量。
1、我的电脑,鼠标右键点击属性
2、选择系统高级设置
3、选择环境变量
4、添加环境变量,复制文件路径,选择新建添加即可
-
Python爬取B站视频信息小练习
2021-05-08 17:02:31闲来无事,尝试爬取B站搜索pyhon1-10页的视频标题、播放量与UP主 查看网页源码,如下 那么代码就很好写了 import requests from pyquery import PyQuery as pq import json import csv from urllib.parse import ... -
python爬取b站视频封面
2020-08-04 15:36:06python爬取b站视频封面 逛b站的时候总会遇到封面好看的视频,其评论区里一片“交封不杀[doge]”的景象。如果遇到不爱看评论的up主,那就只能求助于某神秘网址了(笑)。 神秘网址:https://bilicover.magecorn.com/.... -
Python爬取b站视频的评论
2021-08-23 11:58:24)/", url)[0] else: Bv = Bv[0] print(Bv) f = open(f"b站评论/{Bv}.txt", "w", encoding="utf-8") headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ... -
Python爬取B站视频全部评论
2021-09-06 20:35:51Python3爬取B站视频全部评论1.为什么有这篇文章2.相关代码 1.为什么有这篇文章 最近受朋友委托需要爬取B站视频下的评论作为他的分析数据,我上网查了很多相关教程和文章都没有爬取全部的评论,不能满足朋友的需求,... -
python爬取B站视频弹幕分析并制作词云
2020-09-02 13:38:49视频地址:www.bilibili.com/video/BV19E…本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀。 这次我选取的是自己唯一的爆款视频。就是下面这个。 很多人学习python,不知道从何... -
python3爬取B站视频历史弹幕
2021-07-29 17:51:50python爬取B站视频历史弹幕演示 演示 1.运行程序,输入Bvid和爬取日期。 2.程序运行完成后会在当前文件夹下生成一个csv格式文件。 -
python 爬取B站原视频的实站代码
2020-11-16 15:53:54本文的文字及图片来源于网络,仅供学习、交流使用,...这篇文章主要介绍了python 爬取B站原视频的实例代码,帮助大家更好的理解和使用python 爬虫,感兴趣的朋友可以了解下 B站原视频爬取,我就不多说直接上代码。直接运行 -
Python爬取B站视频信息
2019-10-05 12:38:24该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种反爬,解决反爬后获取到的... -
python爬取B站视频和弹幕文件(demo)
2021-10-19 23:08:00首先对B站的动态加载做了解析找到了他放置Bv号的方法然后再使用了you-get,ffmpeg的组合来下载视频 效果如下: 谁能拒绝会举重的小姐姐呢,珍珍的b站账号:https://space.bilibili.com/2146116262 代码如下: #... -
python3写爬取B站视频弹幕功能
2020-09-20 22:56:52本篇文章给大家讲解一下如何用python3写出爬取B站视频弹幕的功能,有兴趣的读者们参考学习下吧。 -
python简单爬取B站的视频
2021-08-12 10:45:47有时网络不是很好,不适合在线看,想把视频下载到本地看 -
python爬取B站视频中的弹幕并图形化展示
2020-11-26 17:46:33python爬取B站视频中的弹幕并图形化展示 新手上路,参考:https://blog.csdn.net/csdnnews/article/details/106754771案例 需要了解爬取的地址: 1:视频地址:https://www.bilibili.com/video/BV1PK4y1b7dt?t=1 2.... -
每天弄个小爬取之Python爬取批量爬取B站小视频!
2020-09-14 14:28:53本任务要求使用Python语言中的爬虫技术,实现批量爬取B站小视频的爬虫程序。爬取后的效果下图所示。 分析过程如下: 点击上面的排行榜之后,按F12调出浏览器控制台调试界面,点击Network,第一次进入... -
Python爬取B站视频弹幕---词云图制作
2021-01-31 21:32:44Python爬取B站视频弹幕一、简介:二、爬取方式1.如何获取视频的 cidcidcid ?2.爬取下载弹幕3.调用定义的类并解析XML文档4.将文本内容保存为文本文档三、绘制词云图1.绘制词云图代码2.绘图展示 一、简介: 随着... -
年轻小伙竟用python爬取B站视频评论!
2021-06-09 16:14:14今天为大家带来的小demo是爬取B站视频的评论。开始还以为很难,等正真上手的时候发现,也就是那么回事。 高考对于每个人来说都是人生的重大转折点,你考上一所什么样的大学,极大可能改变你未来的人生。因此,读书很... -
大数据Python爬取B站电影排行榜——数据可视化
2021-11-24 08:55:53通过爬取数据—>数据清洗, 最后把数据可视化,呈现数据的可视化效果,该文章主要是制作了简单的数据可视化:折线图、条形图和饼图。除此以外一般的数据可视化还可以包括:词云图、 一、数据可视化是什么? ... -
Python 爬取B站视频信息 弹幕信息 生成词云统计
2019-12-24 11:25:04python 爬取B站视频信息,弹幕信息,生成词云统计图 -
爬取B站视频下所有评论
2021-07-21 09:47:18该脚本可以通过B站视频Bvid,爬取该视频下面的所有评论,保存为csv文件。 输入:视频Bvid 输出:csv文件 -
python爬取b站视频标题并自动创建文件
2018-09-25 13:48:57b 匹配最短的,以a开始,以b结束的字符串。 #如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符) text = r'*?src-videoPage-multiP-part-">(.*?)</div>' #正则匹配 text1 = re.... -
Python 爬取B站(Bilibili.com)UP主的所有公开视频链接及信息
2020-11-18 18:03:18–save_by_page:按页保存用户视频信息,默认为 False(B站用户视频页一页一般为30个视频)。 –time:爬取时,浏览器获取页面的等待时间,默认为 2(秒)。网络状况不佳时等待时间过短可能会导致爬取的数据不完全... -
python爬虫爬取快手视频多线程下载功能
2020-09-20 18:06:40主要介绍了python爬虫爬取快手视频多线程下载功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下