涉及知识点

  • AES解密
    from Crypto.Cipher import AES
    获取密钥:key = key_res.content
    创建解密对象:cryptor = AES.new(key, AES.MODE_CBC, key)
    使用解密对象进行写操作:f.write(cryptor.decrypt(res.content))
  • datetime日期处理
  • cmd命令:copy和del(windows下拼接cmd命令时要避免出现 ‘/’)
  • 多线程及队列(队列可存各种格式的数据)
  • 响应状态码:res.status_code
import requests, re, time, sys, os
from Crypto.Cipher import AES
from multiprocessing import Queue
from threading import Thread
import datetime# 待优化:分两次匹配了视频和key的url
# 如果遇到网站服务器异常,无法正常响应的,可写入日志中供后续处理时参考
# 线程有时会卡死,可能是服务器的问题,得记录爬取日志,不然后续没法分析解决class Video_spider(object):def __init__(self):# 根据爬取需求进行修改self.course_name = '***'self.course_date = datetime.date(2019,2,26)self.course_num = 8self.menuId = '****'self.version = '****'self.headers = {'Origin': 'http://tts.tmooc.cn',# 'Referer': 'http://tts.tmooc.cn/video/showVideo?menuId=646590&version=AIDTN201809','Referer': 'http://tts.tmooc.cn/video/showVideo?menuId=' + self.menuId + '&version=' + self.version,'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',}self.root = os.getcwd()self.folder = self.root + '/spider'self.down_list = Queue()self.tlist = []    # 存放线程的列表# 创建线程爬取url和下载def run(self):th1 = Thread(target=self.get_url)th1.start()self.tlist.append(th1)# 多线程下载for i in range(5):th = Thread(target=self.download,args=(i,))th.start()self.tlist.append(th)print('--------------所有线程创建完毕,等待回收...')for th in self.tlist:th.join()print('所有线程已回收,爬取结束!')def get_url(self):success_count = 0    # 记录url爬取次数,与course_num对应i = 0while success_count < self.course_num:print('开始爬取第%d天url'%(success_count+1))self.course_date += datetime.timedelta(days=i)course_no = self.course_name + self.course_date.strftime("%Y%m%d")[4:]url_am = 'http://videotts.it211.com.cn/' + course_no + 'am/' + course_no + 'am.m3u8'url_pm = 'http://videotts.it211.com.cn/' + course_no + 'pm/' + course_no + 'pm.m3u8'urls = [url_am, url_pm]for index,url in enumerate(urls):res = requests.get(url=url,headers=self.headers,timeout=1)if res.status_code == 200:# 响应成功,转去处理页面信息,解析key和ts的链接self.handle(res,index,course_no)# 若响应失败了,则可能无此url,跳出for循环进行下一次请求elif res.status_code == 404:print('404了')i = 1breakelse:print('艾玛呀出错了,status_code:',res.status_code)i = 1breakelse:success_count += 1i = 1print('第%d天url爬取完成'%success_count)time.sleep(0.2)print('----------url爬取线程结束')# 解析页面,获取key和ts视频的链接def handle(self,res,index,course_no):res.encoding = 'utf-8'html = res.text# 匹配ts文件地址regex_url = re.compile(r'http://.*?\.ts')ts_list = regex_url.findall(html)# 匹配密钥regex_key = re.compile(r'http://.*?\.key')key_url = regex_key.findall(html)[0]key_res = requests.get(url=key_url,headers=self.headers)# 返回二进制对象key = key_res.contentt = (key,ts_list,index,course_no)self.down_list.put(t)# 下载url并解密def download(self,i):while True:try:t = self.down_list.get(block=True,timeout=2)except:print('线程%d爬取结束'%(i+1))breakkey = t[0]ts_list = t[1]index = t[2]course_no = t[3]download_path = self.root + '\\cache' + str(i)if not os.path.exists(download_path):os.mkdir(download_path)# 循环下载ts链接count = 0cryptor = AES.new(key, AES.MODE_CBC, key)err_count = 0for link in ts_list:res = requests.get(url=link,headers=self.headers)filename = download_path + '\\' + '%03d'%count + '.mp4'with open(filename,'wb') as f:try:f.write(cryptor.decrypt(res.content))except:print('-----------第%d个视频解密出错'%count)err_count += 1count += 1print('下载线程%d:已爬完第%d个视频'%(i,count))time.sleep(0.2)print('***************解密出错次数:%d'%err_count)self.merge_file(index,course_no,download_path)# 合成视频文件def merge_file(self,index,course_no,download_path):if not os.path.exists(self.folder):os.mkdir(self.folder)src = download_path + '\\*.mp4'dst = download_path + '\\new.tmp'cmd = "copy /b " + src + ' ' + dstos.system(cmd)os.system('del ' + src)if index == 0:os.rename(dst, self.folder + '/' + course_no + "am.mp4")else:os.rename(dst, self.folder + '/' + course_no + "pm.mp4")if __name__ == '__main__':spider = Video_spider()spider.run()

python爬取视频----blob加密相关推荐

  1. python爬取下载m3u8加密视频,原来这么简单!

    1.前言 爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放. 今天就教大家如果通过python爬取下载m3u8加密 ...

  2. Python爬取视频之爱情电影及解密TS文件和两种合并ts的方法

    俗话说,兴趣所在,方能大展拳脚.so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程. 实现功能: 从网站上爬取采 ...

  3. Python爬取视频之爱情电影及解密TS文件和两种合并ts!

    俗话说,兴趣所在,方能大展拳脚.so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程. 实现功能: 从网站上爬取采 ...

  4. 使用python爬取视频

    写在前面:此博客仅用于参考学习,代码中部分网址已删 准备工作 python burpsuite 视频爬取 视频网址:https://v.qq.com/x/cover/mzc00200xnrv1u5.h ...

  5. 使用Python 爬取视频

    本文章爬取视频以 ".ts" 文件为例,可从视频网站爬取相关视频碎片,最后拼接成一个完整的视频 首先安装Python,安装方法可参考菜鸟教程(Python 环境搭建 | 菜鸟教程) ...

  6. python爬取视频界面简介

    一 用到的库 requests库:众所周知,爬虫神器 二 JSON是什么 JSON ( JavaScript Object Notation) ,是一种数据交互格式. 没有结束标签 更短 读写的速度更 ...

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

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

  8. python爬取视频评论数据

    现在人们都喜欢看小视频,我平时没事的时候也喜欢看些小视频,所以今天我就带大家用python爬取一些小视频数据. 分析网页 打开目标网站,我们在搜索栏里面搜索一下自己感兴趣的关键字,比如我搜索 &quo ...

  9. python爬虫,python学习,如何用python爬取视频资源

    郑重声明:该文章仅供参考学习,他人不得转载,利用非法手段牟利. 这篇文章的由来,是我为了一个月内看的三部电影,充了三个网站的会员之后,痛定思痛,决定再也不干这种傻事了,于是乎,我拿起了python-号 ...

最新文章

  1. mysql 分库分表 ~ 方案选择浅谈
  2. Linux删除 指定数目行【或者所有行】删除光标到行首
  3. numpy 矩阵计算例子
  4. FormView里用FindControl找不到控件的解决方法
  5. 贪吃蛇系列之一——引入
  6. 华为交换机默认vlan都是通的吗_华为设备二层交换技术——Hybrid接口详解
  7. GDI+绘制的一个Report Designer原型
  8. 山西台达plc可编程控制器_(PLC)可编程控制器的编程语言你了解吗?不妨看看...
  9. mysql数据迁移到sqlserver_Oracle,SQL Server,Mysql 三种数据库两表联合更新的方法
  10. 运营小实践 -- 借助大数据平台刻画虎牙直播APP人群画像
  11. Apple苹果ID怎么修改地区经验之谈
  12. 移动应用实战(移动OA)之五_会议室管理之二
  13. mysql phpmyadmin 报403错误_phpmyadmin出现403错误怎么办?
  14. 找回丢失的QQ之普及知识全套
  15. 想要将多个视频拼接在一起?如何把三个视频合成一个视频
  16. godot mysql_go godotenv配置环境变量
  17. 妻子,情人,红颜知己
  18. scrapy学习笔记——HTML页面解析
  19. 淘宝客解析url优惠链接获取商品ID
  20. xPad该歇了,我们需要的只是小尺寸触控显示器

热门文章

  1. 游戏高防服务器租用,I9-9900K服务器为何是首选?
  2. 相亲交友App开发解决方案及功能框架
  3. linux之前关闭信号,Linux 两组信号对比(关闭和停止进程信号)
  4. MDT 评测 — Mate 20 Pro 屏幕素质报告
  5. Uniapp 视频播放器运行到微信小程序后黑屏解决
  6. BUUCTF:[湖南省赛2019]Findme
  7. linux命令解压tar命令,菜鸟学Linux命令:tar命令 压缩与解压缩
  8. 在苹果手机html变大,iPhone手机屏幕变大了怎么办?iPhone设置屏幕缩放的方法
  9. Human Knowledge Belongs to The World2!(升级版)
  10. mysql inner join 索引_MySQL 在 INNER JOIN 场景的使用-爱可生