最近发现一个视频网站,准备去爬取得时候,前面很顺利
利用fiddler抓包获取网站的post数据loads为python字典数据,分析数据就能发现每个视频的连接地址就在其中,

发现这些都是m3u8文件流的形式并且加密的

key

最后实现代码如下:

下载下来后用暴风音影可以播放,其他播放器要用格式工厂转换下格式,兄弟们注意身体啊!

开发环境:windows+pyCharm+python3.5.2

第三方模块:pip3 install pycryptodome

做好的py文件下载:链接:https://pan.baidu.com/s/1VaiHKB-0zObHqoosukVbxA 密码:gx2u

 

import requests
import json
import re
import os, shutil
import urllib.request, urllib.error
from Crypto.Cipher import AES #注:python3 安装 Crypto 是 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pycryptodome
import sys # from Crypto.Random import get_random_bytes
# import Crypto.Cipher.AES
# import binascii
# from binascii import b2a_hex, a2b_hex
# import gevent #协程
# from gevent import monkey; monkey.patch_all() def aes_decode(data, key):
"""AES解密
:param key: 密钥(16.32)一般16的倍数
:param data: 要解密的数据
:return: 处理好的数据
"""
cryptor = AES.new(key,AES.MODE_CBC,key)
plain_text = cryptor.decrypt(data)
return plain_text.rstrip(b'\0') #.decode("utf-8") def getUrlData(url,DOWNLOAD_PATH):
"""打开并读取网页内容index.m3u8
:param url: 包含ts文件流的m3u8连接
:return: 包含TS链接的文件
"""
try:
urlData = urllib.request.urlopen(url, timeout=20) # .read().decode('utf-8', 'ignore')
return urlData
except Exception as err:
error_log = os.path.join(DOWNLOAD_PATH,'error.log')
with open(error_log,'a+') as f:
f.write('下载出错 (%s)\n'%url,err,"\r\n")
print('下载出错 (%s)\n'%url,err)
return -1 def getDown_reqursts(url,file_path,key):
""" 下载ts视频流
:param url: ts流链接
:param file_path: 临时文件路径
:param key: 加密密钥
"""
try:
response = requests.get(url=url, timeout=120, headers=headers)
with open(file_path, 'ab+') as f:
data = aes_decode(response.content,key)
f.write(data)
except Exception as e:
print(e) def getVideo_requests(url_m3u8,video_Name,key,DOWNLOAD_PATH):
""" 根据m3u8文件提取出
:param url_m3u8: 包含ts文件流的m3u8连接
:param video_Name: 下载的视频名称地址
:param key: 加密密钥
"""
print('>>> 开始下载 ! \n')
urlData = getUrlData(url_m3u8,DOWNLOAD_PATH)
tempName_video = os.path.join(DOWNLOAD_PATH,'%s.ts'%video_Name) # 创建临时文件
open(tempName_video, "wb").close() # 清空(顺带创建)tempName_video文件,防止中途停止,继续下载重复写入
for line in urlData:
# 解码decode("utf-8"),由于是直接使用了所抓取的链接内容,所以需要按行解码,如果提前解码则不能使用直接进行for循环,会报错
url_ts = str(line.decode("utf-8")).strip() # 重要:strip(),用来清除字符串前后存在的空格符和换行符
if not '.ts' in url_ts:
continue
else:
if not url_ts.startswith('http'): # 判断字符串是否以'http'开头,如果不是则说明url链接不完整,需要拼接
# 拼接ts流视频的url
url_ts = url_m3u8.replace(url_m3u8.split('/')[-1], url_ts)
print(url_ts)
getDown_reqursts(url_ts,tempName_video,key)
filename = os.path.join(DOWNLOAD_PATH, '%s.mp4'%video_Name)
shutil.move(tempName_video, filename) #转成MP4文件
print('>>> %s.mp4 下载完成! '%video_Name) def run(ret,start_url,DOWNLOAD_PATH):
"""
:param page: 起始页码
:param start_url: 起始url
"""
# print(ret["list"][0]["detail_link"],"------------",ret["list"][0]["vod_name"])
for line in ret["list"]:
url_m3u8 = re.split(r'/',line["vod_pic"]) #取得每一个视频的连接
num = url_m3u8[3] #取唯一标识
url_m3u8 = 'http://rzlkq.com:8091/%s/1000kb/hls/index.m3u8'%num #拼接视频链接
video_Name = line["vod_name"]
key_url = 'http://rzlkq.com:8091/%s/1000kb/hls/key.key'%num #拼接key链接
key = requests.get(url=key_url,timeout=120,headers=headers).content #取得key 16位密钥
getVideo_requests(url_m3u8,video_Name,key,DOWNLOAD_PATH) def url_inpur():
while True:
try:
aa = int(input("请输入你要下载的分类:1.站长推荐 2.国产自拍 3.名优 4.亚洲无码 \r\n>>>"))
break
except Exception as e:
print("输入错误!请输入正确的数字选择>>>")
return aa def check_dir(download_path):
import errno
try:
os.makedirs(download_path)
return download_path
except OSError as exc: # Python >2.5 (except OSError, exc: for Python <2.5)
if exc.errno == errno.EEXIST and os.path.isdir(download_path):
pass
else: raise
if __name__ == "__main__": # print("加载中....")
# os.system("pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests")
# os.system("pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pycryptodome")
# print("下载路径:D盘 \r\n!!!本程序只做交流学习使用,禁止传播!!!\r\n") headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 8.0.0; MIX 2S Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",} def z01():
DOWNLOAD_PATH = check_dir(r'D:\DownLoad\z01') #下载目录
z01page =1
while True:
start_url = "http://qqchub.com/index.php/ajax/data.html?mid=1&page=%s&limit=8&tid=all&by=t&level=1"%z01page
response = requests.get(url=start_url,headers=headers,timeout=20)
ret = json.loads(response.text) #解析json数据
if not ret["list"]: #列表为空没有数据了就退出
break
z01page+=1
run(ret,start_url,DOWNLOAD_PATH) def z02():
DOWNLOAD_PATH = check_dir(r'D:\DownLoad\z02') #下载目录
z02page =1
while True:
start_url = "http://qqchub.com/index.php/ajax/data.html?mid=1&page=%s&limit=8&tid=all&by=t&level=1"%z02page
response = requests.get(url=start_url,headers=headers,timeout=20)
ret = json.loads(response.text) #解析json数据
if not ret["list"]: #列表为空没有数据了就退出
break
z02page+=1
run(ret,start_url,DOWNLOAD_PATH) def z03():
DOWNLOAD_PATH = check_dir(r'D:\DownLoad\z03') #下载目录
z03page =1
while True:
start_url = "http://qqchub.com/index.php/ajax/data.html?mid=1&page=%s&limit=8&tid=all&by=t&level=1"%z03page
response = requests.get(url=start_url,headers=headers,timeout=20)
ret = json.loads(response.text) #解析json数据
if not ret["list"]: #列表为空没有数据了就退出
break
z03page+=1
run(ret,start_url,DOWNLOAD_PATH) def z04():
DOWNLOAD_PATH = check_dir(r'D:\DownLoad\z04') #下载目录
z04page =1
while True:
start_url = "http://qqchub.com/index.php/ajax/data.html?mid=1&page=%s&limit=8&tid=all&by=t&level=1"%z04page
response = requests.get(url=start_url,headers=headers,timeout=20)
ret = json.loads(response.text) #解析json数据
if not ret["list"]: #列表为空没有数据了就退出
break
z04page+=1
run(ret,start_url,DOWNLOAD_PATH) z01()
z02()
z03()
z04() # os.system('createobject("wscript.shell").run"cmd.exe /c shutdown -s -f -t 0"') #Windows关机

  from:https://www.cnblogs.com/chen0307/articles/9679139.html

【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4的更多相关文章

  1. Python爬取视频指南

    摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://w ...

  2. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

  3. Python爬取网易云音乐歌手歌曲和歌单

    仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...

  4. 用Python爬取网易云音乐热评

    用Python爬取网易云音乐热评 本文旨在记录Python爬虫实例:网易云热评下载 由于是从零开始,本文内容借鉴于各种网络资源,如有侵权请告知作者. 要看懂本文,需要具备一点点网络相关知识.不过没有关 ...

  5. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

  6. Python爬取微信小程序(Charles)

    Python爬取微信小程序(Charles) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90045204 一.前言 最近需要获取微信小 ...

  7. Python 爬取所有51VOA网站的Learn a words文本及mp3音频

    Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...

  8. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  9. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

随机推荐

  1. JSONUtils.toJSONString的一个坑

    JSONUtils.toJSONString(null); //返回一个为"null"的字符串 这样会导致一个结果就是StringUtils.isBlank判断后,会为false ...

  2. CAPTCHA---验证码 ---Security code

    BotDetect Java CAPTCHA Generator 3. Add BotDetect Java CAPTCHA Library Dependency Here is how to add ...

  3. How nginx "location if" works

    Nginx's if directive does have some weirdness in practice. And people may misuse it when they do not ...

  4. app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...

  5. Android 不规则封闭区域填充 手指秒变油漆桶

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45954255: 本文出自:[张鸿洋的博客] 一.概述 在上一篇的叙述中,我们通 ...

  6. Android 源码解析 之 setContentView

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41894125,本文出自:[张鸿洋的博客] 大家在平时的开发中,对于setCont ...

  7. VM虚拟机下安装liunx系统

    1.首先打开VMware看到如图所示,然后点击创建虚拟机,选择典型然后下一步 2.选择我稍后安装操作系统然后下一步,选择Linux系统然后下一步.给虚拟机起一个名字,和选择把虚拟机安装在那个位置.然后 ...

  8. 【HTTP原理】TCP/IP三次握手和四次挥手

    HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol),是web联网的基础,也是手机联网常用的协议之一,http协议是建立在TCP协议之上的一种应用. H ...

  9. Windows 下python 环境安装

    1.先在官网上下载安装包,官网地址:  https://www.python.org   2. 选择自己需要的版本进行安装,最好选择新版本下载,   3. 下载完成后,双击运行安装,一直next,直至 ...

  10. bzoj 3126 单调队列优化dp

    能转移的最左是其左边完整区间的最右左端点,最右是能覆盖它的最左左端点-1 #pragma GCC optimize ("O3") #include<cstdio> #i ...