之前写《使用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与神同行主演过的电影_电视剧全集 - 电影123​www.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 地址相关推荐

  1. python爬虫怎么爬同一个网站的多页数据-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  2. python爬网站数据实例-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  3. python爬贴吧回复_通过python爬取贴吧数据并保存为word

    前言 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发 ...

  4. python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  5. python爬朋友圈数据_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  6. python爬今日头条组图_python 爬虫抓取今日头条街拍图片

    1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...

  7. vs用Python爬数据?(一)网页抓取

    你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请 ...

  8. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

  9. python爬取文本中的成语_python正则表达式抓取成语网站

    #anthor jiqunpeng #time 20121124 import urllib import re def getHtml(url): #从URL中读取html内容 page = url ...

  10. java爬取今日头条_今日头条抓取街拍图片数据集

    spider1: 抓取街拍页面的所有入口链接: 1.数据查看到,街拍页面需要的数据集都在data这个集合中,而data是整个数据集字典的一个键,data这个键又包括了一个list,list中是一个个字 ...

最新文章

  1. MPY634U 四象限模拟乘法器
  2. APUE读书笔记-14高级输入输出-06异步IO
  3. java8 虚拟机调优_Java虚拟机调优(八)-典型配置举例2
  4. 实现一个简易的RPC
  5. ASP.NET Core微服务(一)——【完整API搭建及访问过程】
  6. 前端开发 背景图 0229
  7. Bootstrap输入框组中可以使用的元素
  8. AN EMPIRICAL STUDY OF EXAMPLE FORGETTING DURING DEEP NEURAL NETWORK LEARNING 论文笔记
  9. 35岁以上的IT人士如果有一天被公司裁员了,该怎么办?
  10. oracle vm 加大存储,Oracle VM VirtualBox下ubuntu虚拟机存储空间不够解决方案
  11. spring scheduled定时任务
  12. Sql Prompt使用技巧
  13. Unity在NGUI中默认动态字体Arial字体显示不完整解决方案
  14. python爬虫实例(一) b站篇
  15. Python HackerRank 刷题 Pairs
  16. cscope.exe程序的base64文本
  17. springMVC的大体结构及工作流程
  18. 钣金行业mes解决方案,缩短产品在制周期
  19. 尝试安装时出现“无法安装 Office(64 位或 32 位)”错误
  20. Failed to load bundle(http://loaclhost:8081/index.bundle?platfrom=ios.....

热门文章

  1. IMEI码规则及校验算法
  2. 阶跃信号的matlab,单位阶跃信号的表示-matlab
  3. 概念图(Conceptual graph)
  4. LeetCode-Day1
  5. 逆天了!“波士顿动力机器人”离上战场又近了一步
  6. 浅谈JVM的双亲委派机制
  7. 解决PYTHON爬取:RESPONSE.STATUS_CODE为418、403 问题
  8. 数据中心市场或迎新变局,华为数字能源、中金数据“一起向未来”
  9. 程序员需要了解的.NET Framework 编程的好与坏
  10. 刷爆力扣之1 比特与 2 比特字符