网吧电影 - 过期 - 上半部分 - 源代码 - iframe - m3u8 - 两层 - 下载并保存m3u8,名:second_m3u8.txt 文件
1. 打开播放视频 暂停 f12 xhr 刷新网址 找到 index.m3u8 复制 m3u8 在页面源代码查找
视频页 -> iframe(src) -> 视频播放 直接看iframe(src)
没办法右键的情况下怎么查看页面页面源代码 f12 -> Sources(源代码) -> ?url=https://video.buycar5.cn...
# 针对网吧电影的分析: M3U8 在页面源代码中
# 1. 拿到视频页的页面源代码。
# 2. 从视频页的页面源代码中找到对应的 iframe ,提取到 iframe 里面的src
# 3. 请求到url对应的页面源代码。在该页面中解析出真正的M3U8文件地址
# 4. 下载第一层M3U8.从第一层M3U8中解析出第二层的地址
# 5. 下载第二层M3U8.从第二层M3U8中解析出每一个TS文件的路径,启动协程任务
# 6. 对TS文件进行解密操作:先拿到key
# 7. 对TS文件进行合并,还原回mp4文件
import requests
from lxml import etree
from urllib import parse
import re
def get_page_source(url): # 好几次请求,拿到某某某的页面源代码,统一写法,你给我src,我就给你页面源代码
resp = requests.get(url)
# print(resp.text)
return resp.text
def get_iframe_src(url):
print("获取iframe的src值")
page_source = get_page_source(url)
# 1. 拿到视频页的页面源代码。
# 2. 从视频页的页面源代码中找到对应的 iframe ,提取到 iframe 里面的src
tree = etree.HTML(page_source)
src = tree.xpath("//iframe/@src")[0] # xpath 默认取到的东西是个列表 所以加个[0]
# print(url)
# print(src)
src_url = parse.urljoin(url, src)
# print(src_url)
print("成功获取iframe的src值", src_url)
return src_url
def get_first_m3u8_url(src_url):
print("获取第一层M3U8地址")
page_source = get_page_source(src_url)
# 在js里提取数据。最好用的方案:re
obj = re.compile(r'url:"(?P<m3u8_url>.*?)",', re.S) # 从页面源代码复制粘贴过来,把想要的改成 (.*?) 顺便取个名字 (?P<m3u8_url>.*?)
result = obj.search(page_source)
m3u8_url = result.group("m3u8_url")
# print(m3u8_url)
print("成功获取到第一层M3U8地址", m3u8_url)
return m3u8_url
def download_m3u8_file(first_m3u8_url):
print("下载第二层M3U8地址")
# 获取到第二层m3u8文件,并保存在硬盘中
first_m3u8 = get_page_source(first_m3u8_url)
# print(first_m3u8)
# 返回的页面源代码,字符串 解析:换行了 .split()
second_m3u8_url = first_m3u8.split()[-1]
second_m3u8_url = parse.urljoin(first_m3u8_url, second_m3u8_url)
# print(second_m3u8_url)
# 下载第二层m3u8文件 为什么要下载:一行一行去读,解码,合并,记录了文件的正确顺序
second_m3u8 = get_page_source(second_m3u8_url)
with open("second_m3u8.txt", mode="w", encoding="utf-8") as f:
f.write(second_m3u8)
print("下载第二层M3U8成功....数据保存在second_m3u8.txt 文件中...")
def main():
url = "http://www.wbdy.tv/play/30288_1_1.html" # url 过期
src_url = get_iframe_src(url)
# 3. 访问src_url,提取到第一层m3u8文件地址
first_m3u8_url = get_first_m3u8_url(src_url)
download_m3u8_file(first_m3u8_url)
if __name__ == '__main__':
main()

浙公网安备 33010602011771号