郑重声明:该文章仅供参考学习,他人不得转载,利用非法手段牟利。

这篇文章的由来,是我为了一个月内看的三部电影,充了三个网站的会员之后,痛定思痛,决定再也不干这种傻事了,于是乎,我拿起了python—号称除了生孩子什么都能干的工具。

遗憾的是,在阅遍了CSDN,B站,知乎,博客园之后,并没有任何一个网站可以解决我的问题,尤其是我最依赖的CSDN,要么就是压根不能实践的方法,要么就是很老已经不能用的方法,滥竽充数和浑水摸鱼的文章浪费了大量的时间,于是,此文章应运而生。

由于解析电影的网站不同,衍生出了数种不同的爬虫思路,变化性较大,加之解析网站变动较大,这也是在各大资源网站都找不到有用的获取***(手动和谐掉vip)视频的教程的原因之一。

本文所有用到的接口都不会公布(官方封禁),可以自己找或私我。

First and foremost:

本文文字叙述只是整理思路,辅助理解,真正的灵魂在代码,一定要认真看代码。

影视资源常见解析类型

适用人群:

1.纯小白,就是想白嫖电影的

2.初学者,emmm。。至少要会个requests和基本语法吧

3.较为高级一点的初学者,os,requests,time,基础re,基础concurrent,基础AES

4.大佬(反正除了123就直接统称为大佬。。。鼠?)

一.直接解析,另存为保存到本地(简单暴力下载)

小白食用,极度舒适。

找个接口。

最简单没有之一的一种获取视频的方法

值得一提的是很多接口不能直接抓包。

二.可直接抓包的视频

这个是仅次于(一)的简单,打开检查,选中media(媒体),然后解析播放(切记顺序不要乱),就会刷新出文件,点开文件,进入视频界面,直接下载。大电影用的比较少,不妨一试。

呃,比如某站视频不能直接下载嘛不是,找接口直接抓包就完了。

三.无加密的m3u8格式电影

所用到模块:requests,os,time,concurrent(可不用)

最近在看罗small黑战记(时隔七年终于更新了),然鹅,居然只有某站大会员才能看,本着能白嫖绝不三连,呸,花钱,的思想,自己写代码爬!

此时就可以观看该电影,嗯,用过的应该知道,m3u8格式的视频不在大网站上的话,非常容易卡,十分影响观影体验,于是我们选择下载电影。那么,重点就来了。

对于m3u8格式,简单来说就是将一个大视频(几个小时)切割成上千个小的视频片段,后缀为ts,可以跟正常的MP4一样播放。然后你看视频的时候就一个个片段渲染,更详细的可以直接在CSDN或者百度搜搜,这里不赘述。

所以我们的思路就是:

0.在解析网站中获取m3u8文件(or php)

1.把所有的网址提取出来,剔除‘#’开头的没用数据

2.遍历获取每一个视频片段

3.然后将所有的视频片段合并成一个大的电影文件

4.删除下载的每一个视频片段

#补充

5.编写一个下载ts片段的函数,用于开创线程池,加快速度

6.下载过程可能会失败,所以一定要设置最长get时间,并且限定次数防止由于资源问题程序卡死

第一步,打开右键打开检查,在network(网络)里找到m3u8文件

打开检查,选中XHR,然后解析播放(切记顺序不要乱),就会刷新出许多文件

名称多为index.m3u8,没有的话就找后缀为m3u8的文件双击,就会下载到本地一个文档,打开之后就是这个样子的。

大概有两千多行吧。。。。

嗯,这个文件能看到许多的https(一种协议)网址,就是每一个视频片段,ts格式的。

第二步,编写python代码

ok,思路清晰了以后,就开始编写代码了。话不多说上代码(也不算长)

#导入模块
import requests
import os
import time
from concurrent.futures import ThreadPoolExecutorstart = time.time()
#准备下载路径
m3u8 = []
with open('play.php','r') as file:lst = file.readlines()for i in lst:i = i.strip()if i.startswith('#'):continueelse:m3u8.append(i)
print(f'目标文件数共{len(m3u8)}个')
#下载一个ts文件的函数
def download_ts(i):for _ in range(10):try:with open(f'{i}.ts','wb') as file:resp = requests.get(m3u8[i],timeout=15).contentfile.write(resp)print(f'第{i}个ts片段已下载完成!')breakexcept:print(f'第{i}个ts文件下载失败,重新下载!')continue
with ThreadPoolExecutor(100) as t:for i in range(len(m3u8)):t.submit(download_ts,i)t.shutdown()
#补录程序
with ThreadPoolExecutor(50) as f:for i in range(len(m3u8)):with open(f'{i}.ts','rb+') as file:if file.read():continueelse:f.submit(download_ts,i)f.shutdown()
print('ts文件下载完毕')
#ts文件的合并
print('ts文件开始合并....')
with open('罗小黑战记.mp4','wb') as file:for i in range(len(m3u8)):with open(f'{i}.ts','rb') as f:f_view = f.read()file.write(f_view)
print('ts文件合并完毕!')
#ts文件的删除操作
print('开始删除ts文件....')
for i in range(len(m3u8)):try:os.remove(rf'C:\Users\我的电脑\Desktop\python学习\python爬虫项目\vip电影全解\罗小黑战记番剧\{i}.ts')except FileNotFoundError:continue
print('ts文件删除完毕!')
print('电影完美下载!')
end = time.time()
print('本次下载共耗时长:',end-start,'s')

headers是基本反爬,在这里不加也没有影响。

上面的程序开了线程池(ThreadPoolExecutor),所以一部电影三分钟就能下载下来,不开的话就非常的慢,得个把小时才行。

另外,由于网络爬虫可能存在各种错误,所以在downlaod函数和后续删除ts片段中都用try-except捕获异常,并且开了一个线程池做补录,下载第一次未能顺利下载下来的内容。

time模块用来反馈下载电影所用时间,也可以不用。

在XHR里找m3u8,预览里一般都可以看到上千行的网址,如上图。

四.AES加密的的m3u8文件

所用到的模块:requests,re,AES,os,time,concurrent

比较进阶一点的爬虫的(真的就是一点点)

(三)中,我们学会了如何下载m3u8格式的视频,但并非所有的m3u8都是那么的纯洁,有些网站非常的狗,对文件设置了加密(我只见过AES加密的),所以这里我们讨论如何解决有AES加密的视频。

1.首先,我们需要判断是否有加密

2.其次,既然是加密,我们就需要秘钥(key),获取他

3.通过秘钥(key)来解析获取ts文件

#其实就是比(二)多了个解密模块嘛

我们这里选取某站会员(最难处理的就它了,傲娇的要死)的罗little黑战记(37-40集),作为范例。

first.我们需要下载每一集的目录(m3u8文件)

按照(三)中的方法下载就完了。

second.上代码


#b站大会员选ok接口#导入模块
import requests
import os
from Crypto.Cipher import AES     #AES解密模块
import time
from concurrent.futures import ThreadPoolExecutor
import restart = time.time()
#准备下载路径
headers = {'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'}def download_ts(i):for _ in range(10):try:with open(f'{i}.ts', 'wb') as file:response = requests.get(m3u8[i], headers=headers, timeout=15).contentcryptor = AES.new(key, AES.MODE_CBC, key)file.write(cryptor.decrypt(response))print(f'第{i}个ts片段已下载完成!')breakexcept:print(f'第{i}个ts文件下载失败,重新下载!')continue
for _ in range(4):m3u8=[]with open(f'index ({_+7}).m3u8','r+',encoding='utf-8') as file:r = file.read()obj = re.compile(r'URI="(?P<url>.*?)"',re.S)keyurlx = obj.finditer(r)for x in keyurlx:keyurl = x.group('url')file.seek(0,0)lst = file.readlines()for i in lst:i = i.strip()if i.startswith('#'):continueelse:m3u8.append(i)print(f'目标文件数共{len(m3u8)}个')respn = requests.get(keyurl,headers=headers)key = respn.text.encode('utf-8')with ThreadPoolExecutor(100) as t:for i in range(len(m3u8)):t.submit(download_ts,i)t.shutdown()#补录程序with ThreadPoolExecutor(50) as f:for i in range(len(m3u8)):with open(f'{i}.ts','rb+') as file:if file.read():continueelse:f.submit(download_ts,i)f.shutdown()print('ts文件下载完毕')#ts文件的合并print('ts文件开始合并....')with open(f'实验vip电影{_}.mp4','wb') as file:for i in range(len(m3u8)):with open(f'{i}.ts','rb') as f:f_view = f.read()file.write(f_view)print('ts文件合并完毕!')#ts文件的删除操作print('开始删除ts文件....')for i in range(len(m3u8)):try:os.remove(rf'C:\Users\我的电脑\Desktop\python学习\python爬虫项目\vip电影全解\罗小黑战记番剧\{i}.ts')except FileNotFoundError:continueprint('ts文件删除完毕!')print('电影完美下载!')end = time.time()print('本次下载共耗时长:',end-start,'s')

很显然,除了一下下载几集之外,唯一的不同点就是解密,直接套用解密模板就行了。

response = requests.get(m3u8[i], headers=headers, timeout=15).contentcryptor = AES.new(key, AES.MODE_CBC, key)file.write(cryptor.decrypt(response))

就像这样。

由于这个是几集,所以key我们选择从下载的m3u8文件里提取,这里就用到了一点点的re(正则表达式)内容,当然也可以手动提取粘贴到代码里,就是对于好几集的剧来说太麻烦了。

key获取之后一定要编码成utf-8的格式,要不然程序会报错(python这个笨逼他读不懂其他编码格式的数据)

综上,哪怕啥都不会,照搬照套就可以爬取网上能看or不能看的电影。

上述的四种方法,一般来讲前三种就能解决大多数视频了,并且都不难,就是遇到那种情况就用对应的方法解决就完了。

本版本修改n次,一直不过审,差点被封号,迄今为止跟原文相差甚远,我太难了。

python爬虫,python学习,如何用python爬取视频资源相关推荐

  1. [ Python ] 爬虫类库学习之 requests,爬取豆瓣喜剧电影排行榜

    requests 文档:http://cn.python-requests.org/zh_CN/latest/ 安装:pip --timeout=100 install requests [ pyth ...

  2. [ Python ] 爬虫类库学习之 xpath,爬取彼岸图网的 小姐姐 图片

    安装:pip install lxml 实例化一个etree对象 from lxml import etree 1.将本地的html文档中的源码数据加载到etree对象中 etree.parse(fi ...

  3. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

  4. Python爬虫系列(二):爬取中国大学排名丁香园-用户名和回复内容淘宝品比价

    Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品比价 目录 Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品 ...

  5. python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...

    Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...

  6. Python爬虫《自动化学报》数据爬取与数据分析

    Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...

  7. 基于python爬虫————静态页面和动态页面爬取

    基于python爬虫----静态页面和动态页面爬取 文章目录 基于python爬虫----静态页面和动态页面爬取 1. 爬虫的原理 2. 用正则表达式匹配获取数据 3. 页面源码解析 4. 通过req ...

  8. Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息

    Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...

  9. Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影

    文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...

  10. python提取图片文字视频教学_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...

    一.爬虫记得基本方法 1.1 爬虫概述 ​网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使 ...

最新文章

  1. 【Android 面试基础知识点整理】
  2. 如何替换 Ubuntu 11.10 登录屏幕背景和logo
  3. excel函数去重_Python中实现Excel的重复值提取
  4. HTTP协议详解(转载)
  5. php程序设计案例教程 程序题,PHP程序设计案例教程
  6. 【MyBatis框架】mapper配置文件-foreach标签
  7. Java基础学习总结(34)——HTTP协议详解
  8. sparse non-rigid registration of 3d shapes
  9. 201409-1-相邻数对
  10. NSString (NSStringPathExtensions) 类的相关方法和属性梳理
  11. 伍楼阁使用的WordPress代码高亮插件使用说明
  12. m3u8简单教程之我不是药神下载
  13. sim800L调试问题
  14. 3D建模软件快捷键操作:3DMAX篇(第二期)
  15. 支付宝接口http请求及sign加密
  16. catia制作物料明细_CATIA导出装配文件的部件列表BOM清单到Excel文件 | 坐倚北风
  17. 性能稳定的android手机,盘点吃鸡性能最好的4款安卓手机,黑鲨只能垫底
  18. MSI驱动指南HOWTO
  19. 九连环问题(Java)
  20. 加速媒体业务智能化升级 第四范式发布智能推荐系统先荐

热门文章

  1. Curl学习日记3 - 在Linux命令行中使用Curl
  2. PHP合成生成GIF动图
  3. 冯诺伊曼体系结构建模与模拟 之TOY模型机※
  4. 计算机二级MS office(word 01)
  5. linux图形化界面进不去的问题(startx命令报错bash:startx command not found) 经验之谈
  6. 实例学习Ansible系列:颜色与设定
  7. 招商银行深圳分行二面(技术面试)
  8. 玩转Kaggle:Dog Breed Identification【识别狗的类别】
  9. 【Codevs1422】【网络流】河城荷取
  10. 在线数据图表制作-FineReport文本控件