python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址
之前写《使用Python抓取m3u8加密视频》笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手。
今天看了回复,有同学想知道如何从视频网站上获得 index.m3u8 主文件的链接。正好有空,找了个网站看了下,分享笔记如下
使用包
import requests, re
from lxml import etree # 最近爱上xpath,速度比BeautifulSoup快一点,而且xpath的语法通用
示例网址
每个网站的HTML结构不一样,这个是随便找的,用了动态JS和BLOB。blob我没有了解过,不知道怎么解析。不过这个网站有别的办法可以解析出 index.m3u8 地址。
分析搜索链接,获得视频主页
http://www.dy2046.net/search.asp?searchword=%D3%EB%C9%F1%CD%AC%D0%D0与神同行主演过的电影_电视剧全集 - 电影123www.dy2046.net
使用网站顶部的站内搜索功能,随便输入电影名称,观察返回结果网页,可以看到
1、搜索是使用普通的get请求(注意uril转成了gbk编码,必须做相应转码,否则失败)
2、分析结果网页,搜索结果是保存在
测试代码如下
def get_videourl(name):
# 拼接搜索链接并转码
searchurl = requests.utils.quote(f'http://www.dy2046.net/search.asp?searchword={name}',safe=':/.?=&', encoding='gbk')
print(searchurl)
page = requests.get(searchurl)
page = etree.HTML(page.content)
videourl = page.xpath('//ul[@class="piclist"]/li/a')[0].get('href')
return f'{siteurl}{videourl}'
分析视频主页,获得播放链接
def get_index(videourl):
page = requests.get(videourl)
page = etree.HTML(page)
page = page.xpath('/html/body/div//div[@id="jishu"]/div//ul/li/a')
playlist = [f'{siteurl}{i.get("href")}' for i in page]
return playlist
分析播放页面
发现有点麻烦,播放时使用了iframe加载,这种情况requests一般很难获取到iframe内部的链接,需要使用 selenium 包来模拟浏览器,但 seleniume 加载较慢 ,是不得以时的选择。
再观察一下,发现图中在 标签前加载了一段 .js 脚本,打开来看看
var VideoListJson=[
['云播放',
[
'BD\u97E9\u8BED\u9AD8\u6E05$https://youku.cdn1-letv.com/share/3613ef1ee5b75945c042bfb124275a0b$kuyun',
'BD\u7CA4\u8BED\u9AD8\u6E05$https://youku.cdn1-letv.com/share/869b61d6a909d51d982bae4dfd341f0a$kuyun'
]
],
['云点播',
[
'BD\u97E9\u8BED\u9AD8\u6E05$https://youku.cdn1-letv.com/20180403/9033_500a12c4/index.m3u8$m3u8',
'BD\u7CA4\u8BED\u9AD8\u6E05$https://youku.cdn1-letv.com/20180403/9032_72f7d579/index.m3u8$m3u8'
]
]
],urlinfo='http://'+document.domain+'/juqing/yushentongxing/play--.html';
打开.js脚本中的 index.m3u8 ,内容如下
'#EXTM3U\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608\n1000k/hls/index.m3u8'
至此,已经可以确定 .js脚本中就保存了 index.m3u8的地址,做个简单的拼接即可得到真正的 index.m3u8地址。
def get_index(playurl):
# 获得.js脚本 的链接
page = requests.get(playurl)
page = etree.HTML(page.content)
indexurl = page.xpath('//div[@id="bofang-box"]/script')[0].values()[1]
# 拼接.js脚本的链接, 并删除?后面的参数
indexurl = f'{siteurl}{indexurl[:indexurl.find("?")]}'
# 获得.js脚本内容,并提取中 index.m3u8 的链接
page = requests.get(indexurl)
indexurl = re.findall(r"https://[\w\-\.\$/]+\.m3u8",page.text)[0]
tmp = requests.get(indexurl)
tmp = tmp.text[tmp.text.rfind('\n')+1:]
indexurl = indexurl.replace('index.m3u8', tmp)
return indexurl
好了,剩下就是下载和解析 index.m3u8 文件内容了,不多写了。
python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址相关推荐
- python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取
如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...
- python爬网站数据实例-如何用Python爬数据?(一)网页抓取
如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...
- python爬贴吧回复_通过python爬取贴吧数据并保存为word
前言 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发 ...
- python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生
人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...
- python爬朋友圈数据_利用Python爬取朋友圈数据,爬到你开始怀疑人生
人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...
- python爬今日头条组图_python 爬虫抓取今日头条街拍图片
1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...
- vs用Python爬数据?(一)网页抓取
你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请 ...
- python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法
1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...
- python爬取文本中的成语_python正则表达式抓取成语网站
#anthor jiqunpeng #time 20121124 import urllib import re def getHtml(url): #从URL中读取html内容 page = url ...
- java爬取今日头条_今日头条抓取街拍图片数据集
spider1: 抓取街拍页面的所有入口链接: 1.数据查看到,街拍页面需要的数据集都在data这个集合中,而data是整个数据集字典的一个键,data这个键又包括了一个list,list中是一个个字 ...
最新文章
- MPY634U 四象限模拟乘法器
- APUE读书笔记-14高级输入输出-06异步IO
- java8 虚拟机调优_Java虚拟机调优(八)-典型配置举例2
- 实现一个简易的RPC
- ASP.NET Core微服务(一)——【完整API搭建及访问过程】
- 前端开发 背景图 0229
- Bootstrap输入框组中可以使用的元素
- AN EMPIRICAL STUDY OF EXAMPLE FORGETTING DURING DEEP NEURAL NETWORK LEARNING 论文笔记
- 35岁以上的IT人士如果有一天被公司裁员了,该怎么办?
- oracle vm 加大存储,Oracle VM VirtualBox下ubuntu虚拟机存储空间不够解决方案
- spring scheduled定时任务
- Sql Prompt使用技巧
- Unity在NGUI中默认动态字体Arial字体显示不完整解决方案
- python爬虫实例(一) b站篇
- Python HackerRank 刷题 Pairs
- cscope.exe程序的base64文本
- springMVC的大体结构及工作流程
- 钣金行业mes解决方案,缩短产品在制周期
- 尝试安装时出现“无法安装 Office(64 位或 32 位)”错误
- Failed to load bundle(http://loaclhost:8081/index.bundle?platfrom=ios.....
热门文章
- IMEI码规则及校验算法
- 阶跃信号的matlab,单位阶跃信号的表示-matlab
- 概念图(Conceptual graph)
- LeetCode-Day1
- 逆天了!“波士顿动力机器人”离上战场又近了一步
- 浅谈JVM的双亲委派机制
- 解决PYTHON爬取:RESPONSE.STATUS_CODE为418、403 问题
- 数据中心市场或迎新变局,华为数字能源、中金数据“一起向未来”
- 程序员需要了解的.NET Framework 编程的好与坏
- 刷爆力扣之1 比特与 2 比特字符