资源简介
python爬虫相关:
由于很多网站上的视频只提供在线观看,没有下载入口,故有必要进行网络爬虫获取视频资源。
利用requests获取网页源代码中的m3u8链接,对链接进行逐步解析,获取ts列表,下载所有ts文件,将其合并生成mp4文件。做到对视频的爬取。
同名博文相关代码。
代码片段和文件信息
import requests
import os
# 字符(十六进制)转ASCII码
def hexToAscii(h):
d = int(h16) # 转成十进制
return chr(d) # 转成ASCII码
# 从得到的html代码中获取m3u8链接(不同网站有区别)
def getM3u8(http_s):
ret1 = http_s.find(“unescape“)
ret2 = http_s.find(“.m3u8“)
ret3 = http_s.find(“http“ ret1 ret2) # “unescape“和“.m3u8“之间找“http“
m3u8_url_1 = http_s[ret3: ret2 + 5] # 未解码的m3u8链接
# 下面对链接进行解码
while True:
idx = m3u8_url_1.find(‘%‘)
if idx != -1:
m3u8_url_1 = m3u8_url_1.replace(m3u8_url_1[idx:idx+3] hexToAscii(m3u8_url_1[idx+1:idx+3]))
else:
break
return m3u8_url_1
# 寻找字符串s中最后出现字符c的index
def findLastchr(s c):
ls = []
sum = 0
while True:
i = s.find(c)
if i != -1:
s = s[i+1:]
ls.append(i)
else:
break
for i in range(len(ls)):
sum += (ls[i] + 1)
return sum - 1
def getM3u8_2(m3u8_url_1):
r1 = requests.get(m3u8_url_1)
r1.raise_for_status()
text = r1.text
idx = findLastchr(text ‘\n‘)
key = text[idx + 1:] # 得到第一层m3u8中的key
idx = findLastchr(m3u8_url_1 ‘/‘)
m3u8_url_2 = m3u8_url_1[:idx + 1] + key # 组成第二层的m3u8链接
return m3u8_url_2
# 从最原始的url-->生成一个ts列表的文件
def getTsFile(url filename):
try:
r = requests.get(url)
r.encoding = r.apparent_encoding
r.raise_for_status()
http_s = r.text
m3u8_url_1 = getM3u8(http_s)
print(“第一层m3u8链接“ + m3u8_url_1)
m3u8_url_2 = getM3u8_2(m3u8_url_1)
print(“第二层m3u8链接“ + m3u8_url_2)
# 通过新的m3u8链接,获取真正的ts播放列表
# 由于列表比较长,为他创建一个txt文件
r2 = requests.get(m3u8_url_2)
f = open(filename “w“ encoding=“utf-8“) # 这里要改成utf-8编码,不然默认gbk
f.write(r2.text)
f.close()
print(“创建ts列表文件成功“)
return “success“
except:
print(“爬取失败“)
return “failed“
# 提取ts列表文件的内容,逐个拼接ts的url,形成list
def getPlayList(filename m3u8_url_2):
ls = []
f = open(filename “r“)
line = “ “ # line不能为空,不然进不去下面的循环
idx = findLastchr(m3u8_url_2 ‘/‘)
while line:
line = f.readline()
if line != ‘‘ and line[0] != ‘#‘:
line = m3u8_url_2[:idx+1] + line
ls.append(line[:-1]) # 去掉‘\n‘
return ls
# 批量下载ts文件
def loadTs(ls):
root = “D://mp4//“
length = len(ls)
try:
if not os.path.exists(root):
os.mkdir(root)
for i in range(length):
path = root + ls[i][-7:]
r = requests.get(ls[i])
with open(path ‘wb‘) as f:
f.write(r.content)
f.close()
print(path + “ --> OK ( {} / {} ){:.2f}%“.format(i length i*100/length))
print(“全部ts下载完毕“)
except:
print(“批量下载失败“)
# 整合所有ts文件,保存为mp4格式
def tsToMp4():
print(“开始合并...“)
root = “D://mp4//“
outdir = “output“
os.chdir(root)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3994 2019-03-02 17:41 downloadMp4v2.py
文件 67060 2019-03-01 19:32 temp.txt
文件 74180 2019-03-02 17:42 ts.txt
----------- --------- ---------- ----- ----
145234 3
相关资源
- python3 HTMLTestRunner截图&美化&优化
- dmPython.zip
- python实现的改进的遗传算法解决工件
- Python简易滚动抽奖界面程序
- 超限学习机—逻辑回归Python代码
- python3爬取中国天气网天气并写入csv
- Python2.7 贪吃蛇小游戏源码
- python实现logistics的分叉图
- 对任意关键字爬虫对应图片代码
- 图虫网爬虫python实现
- 网站图片爬取代码
- SIFT算法特征提取的python实现
- 已知两点经纬度坐标,求距离函数
- 最新Python3.6网络爬虫实战案例5章(基
- 一个简单的全覆盖路径规划python
- 徐州地区及周边范围noaa气象数据数据
- python五子棋代码
- 社区发现算法 加权GN算法的Python实现
- 基于用户协同过滤usercf的python代码实
- 21天学通python.txt
- python实现视频直播
- python QQ第三方登陆
- tensorflow2.0实现mnist手写数字识别代码
- Python源码剖析_代码(pythonympx.rar)
- 豆瓣爬虫python
- 计算机视觉视频教程百度云盘资源
- Shapely-1.6.4.post1-cp36-cp36m-win_amd64.whl
- python 战棋游戏六边形地图代码实现
- naive bayes代码实现(python版)
- springcloudpython
评论
共有 条评论