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

目录

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


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文件中的链接是等价的,视频播放过程也侧面印证这一点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44026.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python-爬虫抓取视频

没什么可写的了 写点东西审核就不通过 来吧 直接看代码吧 准备&#xff1a; 首先确定视频地址&#xff1a; "http://video.dispatch.tc.qq.com/uwMROfz2r5zEIaQXGdGlX2dfJ6lgHJ4AOe6UhfWwqaorElWS/b3061yp5y1d.p701.1.mp4?vkeyCAA8CE5008F7EFE57C6375F331B807CEBF15…

爬虫实战 | 手把手教你批量爬取某站视频数据

↑↑↑关注后"星标"简说Python 人人都可以简单入门Python、爬虫、数据分析 简说Python推荐 来源&#xff1a;志斌的python笔记作者&#xff1a;志斌大家好&#xff0c;我是老表~ 这几天一直有小伙伴问B站上的视频数据是怎么获取的&#xff0c;今天就来给大家分享一下…

【python如何爬取视频】

该文章实验了如何利用Python进行爬取网络视频&#xff0c;看完该文章基本是可以下载出视频的&#xff0c;如有不足请多多包涵 1、爬虫需要使用到的Python库。 I、requests库II、re库III、 jsonVI、subprocess第一个库是用来进行网络请求的&#xff0c;通俗点理解就是拿来模拟你…

Python爬虫教你爬取视频信息

大家好&#xff0c;我是拉斯&#xff0c;今天分享一个爬取某音视频的一个小案例&#xff0c;大家一起学习 目录 前言基本环境配置爬取目标视频获取视频链接1.查看网页源代码2.抓包工具捕捉 下载视频(以mp4格式进行保存)获取其他信息并打印(作者名&#xff0c;作品名&#xff…

开放原子开源基金会发布《全球开源发展态势洞察》2022年第二期 | 总第二期

当前&#xff0c;开源驱动创新的能力日益显著&#xff0c;已成为经济社会新变革的赋能者。开源通过汇聚创新资源、构建信任环境&#xff0c;促进知识、智慧、技术、成果等的共享&#xff0c;加速创新要素的高效流动&#xff0c;促进全球技术创新成果的落地&#xff0c;已经成为…

chatgpt赋能python:Python加R:让数据科学更加高效

Python加R&#xff1a;让数据科学更加高效 在过去的几年里&#xff0c;Python和R成为数据科学领域中最受欢迎的编程语言。它们提供了丰富的库和工具&#xff0c;帮助从事数据分析和机器学习的人们更加高效地完成任务。然而&#xff0c;Python和R都有其各自的优缺点。 Python的…

微软提出MathPrompter,GPT3的数学推理水平直接干到人类水平

编&#xff5c;LRS 源&#xff5c;新智元 ChatGPT的文科脑有救了&#xff01; 大型语言模型最为人诟病的缺点&#xff0c;除了一本正经地胡言乱语以外&#xff0c;估计就是「不会算数」了。比如一个需要多步推理的复杂数学问题&#xff0c;语言模型通常都无法给出正确答案&…

目标检测评价指标

1、检测精度指标 一、IoU交并比 IoU&#xff08;交并比&#xff09;1、IOU的全称为交并比&#xff08;Intersection over Union&#xff09;&#xff0c;是目标检测中使用的一个概念&#xff0c;IoU计算的是“预测的边框”和“真实的边框”的交叠率&#xff0c;即它们的交集和并…

数据结构03:栈、队列和数组

前言 参考用书&#xff1a;王道考研《2024年 数据结构考研复习指导》 参考用书配套视频&#xff1a;3.1.1_栈的基本概念_哔哩哔哩_bilibili 特别感谢&#xff1a;ChatGPT3.5老师&#xff0c;检查其它同学的作业是从代码里找BUG&#xff0c;检查我的作业是恰恰是相反的...&am…

chatgpt赋能python:Python怎么算数的总和

Python怎么算数的总和 Python是一种广泛使用的解释型编程语言&#xff0c;它可以用于各种应用程序的编写&#xff0c;包括数据分析、Web应用程序、机器学习等等。而在编写代码时&#xff0c;最基础的一步&#xff0c;就是算数计算。本文将介绍如何使用Python实现算数计算的总和…

GitHub和Git使用教程

转载自http://blog.csdn.net/javaandroid730/article/details/53522872 GitHub和Git入门 考虑到大家以前可能对版本控制工具和Linux命令行工具都不了解&#xff0c;我写了一个简单的博客来让大家学会入门使用方法。 GitHub的简单使用 第一步 创建GitHub账号 1. 打开GitHub官网。…

CSDN 个性化推荐的数据治理

目录 1. 背景2. 数据治理2.1 从内容层面提升数据质量2.2 从用户层面提升数据质量2.3 增加特定数据的曝光2.4 保证数据的正确性与实效性 3. 总结 相关阅读 CSDN 个性化推荐系统的设计和演进如何支持研发对CSDN个性化推荐系统重构 1. 背景 CSDN 的个性化推荐流在主站中是一个很…

解决多御浏览器问题的5大干货,看这一篇就够了

浏览器是我们频繁使用的软件之一&#xff0c;在使用浏览器的过程中&#xff0c;我们总会遇到各种各样的问题。小编这就为大家总结了一篇多御浏览器遇到问题的解决干货&#xff0c;这篇文章可以为大家解决多数问题&#xff0c;下面小编就来简单的说一说。 1、怎么对多御浏览器设…

微软 Authenticator更换登录设备

微软 Authenticator更换登录设备 要把微软 Authenticator换到其它手机&#xff0c;网上查到需要备份-恢复等&#xff0c;但是操作时发现需要Google play服务&#xff0c;但是安装后仍提示未安装&#xff0c;后发现用如下方式可进行更换。 1、登录该网址 https://mysignins.micr…

Microsoft365账号登录安全保护:使用microsoft authenticator应用验证

国际版Microsoft365在web端登录后显示组织需要更多信息&#xff0c;来保护账号安全。 点击下一步 使用Microsoft authenticator进行验证&#xff0c;在手机中下载authenticator客户端 此时可以选择添加工作账户-验证 若无法添加工作账户 选择“我想使用其他身份验证器应用”…

使用微软DNS服务器解决Hotmail、微软账户登录页面无法访问的问题

近日&#xff0c;在重装Windows 10系统之后&#xff0c;发现Edge浏览器无法登录微软账号做数据同步&#xff0c;具体表现为登录页面无法打开。此前&#xff0c;通过浏览器访问hotmail等页面的时候&#xff0c;也经常发生页面无法打开或者打开及其缓慢的情况&#xff0c;只是这次…

matlab快速解方程,matlab如何解方程 matlab解方程 matlab如何解方程

matlab解方程应该怎么解呢?在平常的学习当中&#xff0c;利用matlab解方程&#xff0c;绝对不是一门轻易掌握的学科。我们应该如何利用matlab解方程呢?下面相关方法分享给大家。 【matlab解方程】 1、先举一例&#xff0c;解方程"x^2100*x990" 在matlab ”Command …

matlab: 解一元多次方程与复杂的一元多次方程

1、解 syms x eqx^22*x1; ssolve(eq,x)结果&#xff1a; s -1-1 这里使用到syms x&#xff0c;意思是定义一个变量 x, 之后可以使用这个变量构造表达式。 solve(eq,x)是将x作为求解变量&#xff0c;求解eq0的结果。 2、比如需要求变量t, 已知k3, p6; 中间及经过 , , …

MMA-mathematica数值求解非线性偏微分方程组

参考&#xff1a;mathematica.pdf 参考&#xff1a;MATHEMATICA微分方程.pdf 数学微分方程&#xff0c;第三版&#xff0c;有两个目的。 首先&#xff0c;我们介绍和讨论在典型的本科和研究生课程中所涵盖的主题&#xff0c;包括拉普拉斯变换、傅立叶级数、特征值问题和边值问题…

MATLAB怎么解方程解,怎么用Matlab解方程?

工具/材料 matlab 2016a 打开matlab&#xff0c;首先定义变量x&#xff1a; syms x; matlab中solve函数的格式是solve(f(x), x)&#xff0c;求解的是f(x) 0的解。 第一个例子&#xff0c;求解最常见的一元二次方程x^2-3*x10: solve(x^2-3*x1,x)&#xff0c;解出的结果用精确的…