目录

  • 一、写在前面
  • 二、某站视频爬取
  • 三、某影院爬取

Author:qyan.li

Date:2022.6.23

Topic:python爬虫获取视频类内容

一、写在前面

​ ~~~~~~~~~~          最近放暑假,闲来无事,爬点东西来玩。这学期由于课程需要,多次用爬虫的技术来获取数据,但都是获取一些文字类的数据。突发奇想,自己想利用爬虫获取一些音视频类的数据。下面以某站和某影院为例,说明爬虫获取音视频的技术和方法。某站的视频爬取教程参考自某站视频(自己爬自己,哈哈哈),某影院的视频爬取以某站为启发,自己编写。代码仅供参考,不用做其他用途。

​ ~~~~~~~~~~          某站的视频爬取参考自某站,可根据索引连接对应至原视频教程,较为详细,因此不会作为本文讲解的重点,城市影院代码自己编写,其中存在自己的思考和尝试,因此会作为本文讲解的重点。

二、某站视频爬取

​ ~~~~~~~~~~          此处粘贴一下爬取某站站视频的源代码,方便大家参考借鉴:

# -*-coding = utf-8-*-# Author:qyan.li
# Date:2022/6/20 11:48
# Topic:借助于python爬取某站视频(某站站资源)
# Reference:https://www.bilibili.com/video/BV1GF411c7dA?p=3&vd_source=98cb4eb5f0c21487fcbd999a5f430af1import requests
import re
import json
import pprint
import subprocessdef askURL(url):head = {## 此处设置防盗链:指明连接的请求来源于B站,合法'referer':'https://www.bilibili.com/','user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'}response = requests.get(url = url,headers = head)return responsedef getVideoInfo(response):## 正则表达式:用于匹配获取音频和视频地址findUrl = re.compile('<script>window.__playinfo__=(.*?)</script>')VideoInfo = re.findall(findUrl,response.text)[0]## 字符串转换为python的数据类型,便于后续操作jsonData = json.loads(VideoInfo)return jsonDatadef download(jsonData):# print(type(jsonData))## 解析获得音频和视频的urlaudioURL = jsonData['data']['dash']['audio'][0]['baseUrl']videoURL = jsonData['data']['dash']['video'][0]['baseUrl']print(audioURL)print(videoURL)## 用于下载音频和视频信息audioContent = askURL(audioURL).contentwith open('./' + 'python教程' + '.mp3',mode = 'wb') as f:f.write(audioContent)videoContent = askURL(videoURL).contentwith open('./' + 'python教程' + '.mp4',mode = 'wb') as f:f.write(videoContent)## 音视频合成参考:https://blog.csdn.net/weixin_43835542/article/details/109493050
## ffmpeg下载:https://blog.csdn.net/pythonlaodi/article/details/109222790
## 字符串前面加f:https://blog.csdn.net/qq_43463045/article/details/93890436
## (字符串中花括号中的部分可以正常的替换执行)
def audioAndVideo(audioFile,videoFile):outfile_name = './output.mp4'cmd = fr'F:\CommonApp\ffmpeg\bin\ffmpeg.exe -i {audioFile} -i {videoFile} -acodec copy -vcodec copy {outfile_name}'print(cmd)subprocess.call(cmd,shell=True)def main():html = askURL(url = 'https://www.bilibili.com/video/BV1GF411c7dA')jsonData = getVideoInfo(html)## pprint可以按照标准的方式打印字典,便于查阅pprint.pprint(jsonData)download(jsonData)audioAndVideo(r'C:\Users\腻味\Desktop\VideoClawer\BiliBiliClawer\python教程.mp3',r'C:\Users\腻味\Desktop\VideoClawer\BiliBiliClawer\python教程.mp4')passif __name__ == '__main__':main()

爬虫代码小Tips:

  1. head中不仅需要指明user-agent,还需要referer指明连接的请求来源于原网站,是合法的请求连接
  2. 至于我们为什么知道playinfo中包含我们所需要的url信息,原视频中未提及,应该是经过无数次的尝试和探索,寻找到的视频和音频连接
  3. playinfo中提取目标信息可能不具有普遍性,没有办法进行移植,但是download函数的编写和使用具有普遍性,可以通过此种方式完成借助于url下载所需要的音视频内容
  4. ffmpeg网络上称为音视频处理鼻祖级的存在,可以学习一下,方便后期的音视频处理使用

三、某影院爬取

​ ~~~~~~~~~~          上面主要内容在于某站视频爬取,下面我们将以某影院为例,借用上述某站爬取代码思想爬取某影院电影。首先说明:下面的代码并非完整的爬虫代码,但可以保证获取到电影的音视频并且下载至本地。老样子,还是先上代码方便大家参考借鉴:

## Author:qyan.li
## Date:2022.6.22
## Topic:借助于python爬取某影院电影视频import requests
import re
import os
import subprocessdef askURL(url):head = {## 此处设置防盗链:指明连接的请求来源于B站,合法'referer':'https://www.citydy.com/','user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'}response = requests.get(url = url,headers = head)return responsedef readFile(filePath = ''):with open(filePath,'r') as f:urlString = f.readlines()urlLst = [string.strip('\n') for string in urlString if 'https' in string]return urlLstdef VideoClawer(urlLst):with open('./全球风暴.mp4',mode = 'ab') as f:for i in range(len(urlLst)):videoContent = askURL(urlLst[i]).contentf.write(videoContent)print(i)if __name__ == '__main__':content = readFile(filePath = './全球风暴.m3u8')VideoClawer(content)

通过观察代码可以发现:

某影院视频爬取的思路与某站爬取类似,都是找到视频链接url,而后通过下载链接内容存入指定文件中实现(实际上,这种操作和思想本身借鉴于某站视频资源的爬取),但是区别体现在:

  • 某影院音视频合并不分离,因此不需要分别下载音视频文件,而后再进行合并
  • 某影院寻找m3u8文件,内含切片视频的链接,按照链接次序下载即可(有关m3u8文件的说明,可自行检索查询)

​ ~~~~~~~~~~          下面我们开始主要说明m3u8文件的获取及解析,首先简单提一下m3u8文件,在视频播放时,为保证视频播放的流畅度,可以将一大段视频进行切片,形成若干的ts视频切片文件,视频播放时,按照顺序一段段播放ts文件即可,而m3u8文件即是存放ts文件的索引文件,其中包含切片视频文件ts的下载url,我们仅需要按照这些url下载对应的视频内容即可。

我们以爬取某影院的全球风暴电影为例进行说明:

  1. 首先进入至某影院,搜索全球风暴,打开电影播放界面,按下F12打开网络源码,点击网络(network),ctrl+R刷新界面:

  2. 点击大小,将界面中请求按照从大到小的顺序排列,找到类型为xhr,文件大小最大的请求(图中红线标注的位置)

  1. 点击此词条对应的名称进入,复制请求url(图中红线标注的位置),至浏览器搜索框进行下载

  1. 下载完成后获得m3u8文件

关于m3u8文件的小Tips:

  • 其他音视频均可按照此方式查找并手动下载m3u8文件
  • m3u8文件下载时,如界面提示403 forbidden,可按照上述方式重新操作下载即可

​ ~~~~~~~~~~          上面主要讲述如何从浏览器界面中获取m3u8文件,下面我们聚焦于m3u8文件的解析:

  • 打开下载完成的m3u8文件

其中红线标注的部分即为上面提到的切片视频的url链接,我们仅需要根据此链接下载视频内容即可,但是注意下载下仅为原视频的一段,大概也就10s左右

  • 提取链接,下载视频

    1. 首先提取出m3u8文件中所有的url链接(判断的方式是当前行中是否包含https字段)

      with open(filePath,'r') as f:urlString = f.readlines()
      urlLst = [string.strip('\n') for string in urlString if 'https' in string]
      
    2. 根据提取到的url下载视频内容

      with open('./全球风暴.mp4',mode = 'ab') as f:for i in range(len(urlLst)):videoContent = askURL(urlLst[i]).contentf.write(videoContent)print(i)
      

      小Tips:

      1. 以二进制追加的形式打开,因为提取一段段视频至一个mp4文件中,必须以追加的形式写入(a),同时以二进制形式操作文件(b)
      2. print(i)是为观察视频下载进度设置
      3. 自己曾尝试将每个url都保存为一个mp4小文件,可以但是后续视频合并较为繁琐且难以操作,因此没有特殊需求不建议使用此方法
    3. 执行完上述操作,没有其他问题的情况下,应该可以成功下载视频


​ ~~~~~~~~~~          最后大家可以回到下载m3u8的界面,点击播放按钮播放电影,可以观察右侧请求的变化:

​ ~~~~~~~~~~          在视频的播放过程中,可以看到,在m3u8文件下载链接的上方大概每隔几秒就会重新出现一个xhr,这个其实就是一个个的切片视频,大家如果感兴趣,可以按照此链接进行视频下载,可以获得某一段视频文件。实际上这个和我们m3u8文件中的链接是等价的,视频播放过程也侧面印证这一点。

python高阶爬虫---视频类内容爬取,内含详细教程和代码实例相关推荐

  1. python爬虫图片实例-Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  2. python爬图代码实例_Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  3. Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  4. 【Python】Scrapy爬虫框架小试牛刀:爬取某论坛招聘信息

    Scrapy爬虫框架小试牛刀:爬取某论坛招聘信息 背景 Scrapy工作原理 创建项目 创建爬虫 确定数据爬取思路 编写对象:item.py 制作爬虫:muchongrecruit.py 存储内容:p ...

  5. Python,requests爬虫,使用代理爬取大众点评(含爬取结果。。。在文末)

    由于在工作中,客户需要大众点评的行业数据,因此本人使用Python对大众点评网站进行了爬取,虽然在爬取之前就想好了可能会遇到的坑,但是没想要从坑中爬出来这么难.本次大众点评爬虫代码编写耗时一个月.也算 ...

  6. 北邮 python 学堂在线动态请求页面内容爬取

    声明:用途仅供学习使用 实验一 爬取学堂在线: 一.实验题目 爬取学堂在线的计算机类课程页面内容 点击跳转学堂在线 要求将课程名称.老师.所属学校和选课人数信息,保存到一个csv文件中. 二.实验环境 ...

  7. python英雄联盟脚本是什么_Python3爬取英雄联盟英雄皮肤大图实例代码

    爬虫思路 初步尝试 我先查看了network,并没有发现有可用的API:然后又用bs4去分析英雄列表页,但是请求到html里面,并没有英雄列表,在英雄列表的节点上,只有"正在加载中" ...

  8. python知乎爬虫收藏夹_Python爬取知乎问题收藏夹 爬虫入门

    简介 知乎的网站是比较好爬的,没有复杂的反爬手段,适合初学爬虫的人作为练习 因为刚刚入门python,所以只是先把知乎上热门问题的一些主要信息保存到数据库中,待以后使用这些信息进行数据分析,爬取的网页 ...

  9. 【Python】实现爬虫(完整版),爬取天气数据并进行可视化分析

    ✌️✌️✌️大家好呀,你们的作业侠又轰轰轰的出现了,这次给大家带来的是python爬虫,实现的是爬取某城市的天气信息并使用matplotlib进行图形化分析✌️✌️✌️ 好了,老规矩,我的可爱粉丝们不 ...

  10. 爬虫-视频资源的爬取

    视频爬取 - 知乎 https://zhuanlan.zhihu.com/p/89576538

最新文章

  1. delphi windows编程_2020年值得关注的新编程V语言Vlang,对标Golang、Rust、Swift
  2. C#中获取指定目录下所有目录的名称、全路径和创建日期
  3. JQUERY使选定DOM元素还原end
  4. Drools学习 入门实例
  5. C#学习之用迭代器实现枚举器
  6. Colourshell:给 shell 命令着色
  7. python创建docx文件
  8. [转]VMPlayer的Briged网络配置
  9. sql身份证号计算年龄_函数
  10. uni-app 小程序引入字体图标
  11. 千万不要用efficientnet做bone net
  12. STM32串口通信编程
  13. Python values()函数用法
  14. 【Appium】手机按键(比如返回键、Home键等)的数字代号总结
  15. 解决win7卢布符号显示问题
  16. 零基础怎么学习平面设计,学习平面设计需要多久?
  17. Flutter 2.0 Null-Safety(空安全)使用和理解
  18. 使用Vue+Element-UI从0搭建一个常见的前端模板
  19. 纯Web前端打造的元宇宙展厅——开箱即用的Lingo3D游戏引擎 支持原生、React、Vue
  20. 常用的mysql存储引擎及其特点

热门文章

  1. Java简介:Java是什么?及Java语言的特点
  2. win10千万不要重置_小白不要再用“一键重装系统”了,后果很严重!
  3. cad导出pdf_CAD手机看图软件中dwg格式图纸导出为PDF格式后没有颜色怎么办?
  4. H3C下一代防火墙介绍及开局指导培训答疑汇总
  5. 机器视觉中偏振片的应用
  6. Python生成图文并茂的PDF报告
  7. C语言图形库——easyx的使用
  8. linux识别不了搜狗安装包,为啥安装使用搜狗拼音不成功?
  9. JDK11 下载与安装
  10. 身份证号码15位转18位