blob的真实地址怎么获得_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址
之前寫《使用Python抓取m3u8加密視頻》筆記的原因,是自己有幾個視頻想保存,但對于m3u8, .ts 文件拼接不熟悉,就嘗試寫個腳本練手。
今天看了回復,有同學想知道如何從視頻網站上獲得 index.m3u8 主文件的鏈接。正好有空,找了個網站看了下,分享筆記如下
使用包
import requests, re from lxml import etree # 最近愛上xpath,速度比BeautifulSoup快一點,而且xpath的語法通用示例網址
http://www.dy2046.net/index.html
每個網站的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、分析結果網頁,搜索結果是保存在<ul class="piclist"></ul>標簽中
測試代碼如下
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}'分析視頻主頁,獲得播放鏈接
打開視頻主頁 http://www.dy2046.net/juqing/yushentongxing/ ,找到播放鏈接。
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分析播放頁面
打開播放鏈接 http://www.dy2046.net/juqing/yushentongxing/play-0-0.html
發現有點麻煩,播放時使用了iframe加載,這種情況requests一般很難獲取到iframe內部的鏈接,需要使用 selenium 包來模擬瀏覽器,但 seleniume 加載較慢 ,是不得以時的選擇。
再觀察一下,發現圖中在 <iframe> 標簽前加載了一段 .js 腳本,打開來看看
var VideoListJson=[['云播放',['BDu97E9u8BEDu9AD8u6E05$https://youku.cdn1-letv.com/share/3613ef1ee5b75945c042bfb124275a0b$kuyun','BDu7CA4u8BEDu9AD8u6E05$https://youku.cdn1-letv.com/share/869b61d6a909d51d982bae4dfd341f0a$kuyun']],['云點播',['BDu97E9u8BEDu9AD8u6E05$https://youku.cdn1-letv.com/20180403/9033_500a12c4/index.m3u8$m3u8','BDu7CA4u8BEDu9AD8u6E05$https://youku.cdn1-letv.com/20180403/9032_72f7d579/index.m3u8$m3u8']]],urlinfo='http://'+document.domain+'/juqing/yushentongxing/play-<from>-<pos>.html';
對比在瀏覽器中找到的 index.m3u8地址 https://youku.cdn1-letv.com/20180403/9033_500a12c4/1000k/hls/index.m3u8 ,發現很像啊
打開.js腳本中的 index.m3u8 ,內容如下
'#EXTM3Un#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608n1000k/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 文件內容了,不多寫了。
總結
以上是生活随笔為你收集整理的blob的真实地址怎么获得_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPD Win Mini 游戏掌机曝光:
- 下一篇: python爬虫用多线程还是多进程_py