教你如何下载斗罗大陆

仅供学习使用

F12获取m3u8文件链接

(有时这个文件会找不到,不知道为啥)
推荐用这个url,py代码会提取vurl

Python,给爷爬

import requests
import re
import os
import urllib.parse
import time
start_time = time.time()
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
}
m3u8_url = input("m3u8_url:")
# url解码
m3u8_url = urllib.parse.unquote(m3u8_url)
r_url = '.*&vurl=(.*ver=4)'
url_list = re.findall(r_url,m3u8_url)
if len(url_list) != 0:m3u8_url = url_list[0]
m3u8 = requests.get(m3u8_url,headers = headers).text
r_m3u8 = ',\n(.*?)#'
# re.S整体匹配
ts_all = re.findall(r_m3u8,m3u8,re.S)
print('共 %d 个ts文件'%len(ts_all))
r_ts = '(.*)/.*'
ts_1 = re.findall(r_ts,m3u8_url)[0]
num = 0
if not os.path.exists("./ts"):os.mkdir("./ts")
for ts_2 in ts_all:ts_url = ts_1 + '/' + ts_2ts = requests.get(ts_url,headers = headers).contentwith open('./ts/%d.ts'%num,'wb') as fp:fp.write(ts)print('%d.ts save'%num)num += 1
end_time = time.time()
print('下载完成,总耗时:',end_time-start_time) 

bat合并ts文件

cd ts
set /p n=起始数字:
set /p end=结束数字:
copy %n%.ts out.ts
set num=%n%-%end%
:home
set /a n+=1
echo Y | copy /b out.ts+%n%.ts temp.ts && move /y temp.ts out.ts
if not %n%==%end% goto home
move /y out.ts ../out_%num%.mp4
pause

默认720p,更高画质可能需要会员的cookie
更新
加入协程函数,但是不太稳定,有的ts会卡死
等我以后再优化吧
问题应该和tasks缓存有关,代码结束后关闭即可

for task in asyncio.Task.all_tasks():task.cancel()
loop.close()

关闭也不行,有时还是会卡
完整协程代码(已废弃,最新代码在下面)

import requests
import re
import os
import urllib.parse
import asyncio
import aiohttp
import time
start_time = time.time()
error = []
async def get(num,url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',}print('%d.ts save start'%num)try:async with aiohttp.ClientSession() as session:async with await session.get(url,headers = headers) as response:ts = await response.read()with open('./ts/%d.ts'%num,'wb') as fp:fp.write(ts)print('%d.ts save finish'%num)except:print('%d.ts save error'%num)error.append([num,url])
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
}
m3u8_url = input("m3u8_url:")
# url解码
m3u8_url = urllib.parse.unquote(m3u8_url)
r_url = '.*&vurl=(.*ver=4)'
url_list = re.findall(r_url,m3u8_url)
if len(url_list) != 0:m3u8_url = url_list[0]
m3u8 = requests.get(m3u8_url,headers = headers).text
r_m3u8 = ',\n(.*?)#'
# re.S整体匹配
ts_all = re.findall(r_m3u8,m3u8,re.S)
print('共 %d 个ts文件'%len(ts_all))
r_ts = '(.*)/.*'
ts_1 = re.findall(r_ts,m3u8_url)[0]
num = 0
tasks = []
if not os.path.exists("./ts"):os.mkdir("./ts")
for ts_2 in ts_all:ts_url = ts_1 + '/' + ts_2c = get(num,ts_url)task = asyncio.ensure_future(c)tasks.append(task)num += 1
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
# 关闭全部任务,防止缓存的tasks出错
for task in asyncio.Task.all_tasks():task.cancel()
loop.close()
# 基本不会有失败,留着备用了
if len(error) == 0: print('全部下载成功')
else: print('失败 %d 次\n处理下载失败的内容'%len(errror))for url in error:num = url[0]ts = requests.get(url[1],headers = headers).contentwith open('./ts/%d.ts'%num,'wb') as fp:fp.write(ts)print('%d.ts save'%num)
end_time = time.time()
print('下载完成,总耗时:',end_time-start_time)

协程的速度还是很快的(左普通下载,右协程下载)

也许还存在问题,以后再说吧
想了个折中的办法
设置了每次开始的任务数量,循环调用协程函数,防止等待超时
暂时情况稳定,不会卡
最新协程代码

import requests
import re
import os
import urllib.parse
import asyncio
import aiohttp
import time
start_time = time.time()
error = []
async def get(num,url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',}print('%d.ts save start'%num)try:async with aiohttp.ClientSession() as session:async with await session.get(url,headers = headers) as response:ts = await response.read()with open('./ts/%d.ts'%num,'wb') as fp:fp.write(ts)print('%d.ts save finish'%num)except:print('%d.ts save error'%num)error.append([num,url])
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
}
m3u8_url = input("m3u8_url:")
# url解码
m3u8_url = urllib.parse.unquote(m3u8_url)
r_url = '.*&vurl=(.*ver=4)'
url_list = re.findall(r_url,m3u8_url)
if len(url_list) != 0:m3u8_url = url_list[0]
m3u8 = requests.get(m3u8_url,headers = headers).text
r_m3u8 = ',\n(.*?)#'
# re.S整体匹配
ts_all = re.findall(r_m3u8,m3u8,re.S)
print('共 %d 个ts文件'%len(ts_all))
r_ts = '(.*)/.*'
ts_1 = re.findall(r_ts,m3u8_url)[0]
num = 0
tasks = []
if not os.path.exists("./ts"):os.mkdir("./ts")
# 控制每次开始的任务数量,防止等待超时
max_link = 20
t = len(ts_all) // max_link
if len(ts_all) % max_link != 0:t += 1
for i in range(1,t+1):print('第 %d 个任务'%i)while num < max_link*i and num < len(ts_all):ts_url = ts_1 + '/' + ts_all[num]c = get(num,ts_url)task = asyncio.ensure_future(c)tasks.append(task)num += 1loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))# 取消全部任务for task in asyncio.Task.all_tasks():task.cancel()
loop.close()
# 基本不会有失败,留着备用了
if len(error) == 0: print('全部下载成功')
else: print('失败 %d 次\n处理下载失败的内容'%len(errror))for url in error:num = url[0]ts = requests.get(url[1],headers = headers).contentwith open('./ts/%d.ts'%num,'wb') as fp:fp.write(ts)print('%d.ts save'%num)
end_time = time.time()
print('下载完成,总耗时:',end_time-start_time)

教你如何下载斗罗大陆相关推荐

  1. linux安装光盘下载,教你如何下载Fedora 7安装光盘

    教你如何下载Fedora 7安装光盘 发布时间:2007-11-05 16:17:48来源:红联作者:Number 你可以从很多途径取得 Fedora 的安装光盘,其一是从网上下载安装光盘的 ISO映 ...

  2. 【转】教你如何下载在线视频

    教你如何下载在线视频 在其它网站看到,觉得很实用,搬到这儿来跟大家一块儿分享 QUOTE: 现在在线视频越来越多了,想下载怎么办?下面我总结了三条方法,好好学习哦.恩.主要是针对FLV视频的,什么是F ...

  3. 教你如何下载在线视频

    在其它网站看到,觉得很实用,搬到这儿来跟大家一块儿分享 教你如何下载在线视频 QUOTE: 现在在线视频越来越多了,想下载怎么办?下面我总结了三条方法,好好学习哦.恩.主要是针对FLV视频的,什么是F ...

  4. 下 文库 试读_莎莎教您怎么样下载超星全部试读图书

    莎莎教您怎么样下载超星全部试读图书 大家好 , 我叫殷素莎 . 今天莎莎教大家怎么下载超星里面 所有的试读图书 , 其实说起来这个方法没有什么技术含量的 大家打开超星的官方网站 http://book ...

  5. 教你如何下载、安装、使用SQL Server

    这个星期开始,学校开始上网课了,有点点不开心,想到自己身为疫区人民,既然没去当志愿者为社会服务,还是窝在家里好好学习吧.今天教大家如何下载.安装.使用SQL Server,很简单,人人都学的会. 下载 ...

  6. Android Studio系列教程一:下载与安装

    原文出处:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 背景 相信大家对Android Studio已经不陌生 ...

  7. 手把手教你如何下载各种文具用品的商品图

    小伙伴们,暑假余额已经不足啦!各大电商平台上,各种开学文具用品促销已经开始上台了.这年头开一个文具用品店也是不错的.今天小编就来手把手教小伙伴们如何下载适合自己店铺各种文具商品的商品图吧. 首先,还是 ...

  8. python主题壁纸_Python教你如何下载你喜欢的桌面壁纸

    相关知识 1.URL处理模块(库) import urllib.request as req 2.创建一个表示远程url的类文件对象 req.urlopen(' ') 3.导入re包(正规表达式包) ...

  9. 手把手教你如何下载大厂页面的字体——开发

    在个人学习的商城开发中,有些网上比较好看的字体想要下载该怎么办呢?接下来详细介绍一下 拿小米商城举例:https://www.mi.com/ 这个搜素框中的搜索符号其实是一种字体,那么如何来下载这种字 ...

最新文章

  1. 机器学习算法------2.11 模型的保存和加载(joblib.dump()、joblib.load())
  2. python常用命令大全-Python常用命令之集合
  3. C语言 之建立静态链接库
  4. 成功解决ImportError: Could not find ‘cudart64_90.dll‘. TensorFlow requires that this DLL be installed in
  5. 近五年计算机网络技术的发展,计算机网络技术的近期发展
  6. 图形学教程Lecture 2: Review of Linear Algebra知识点总结
  7. MyBastis 三种批量插入方式的性能比较
  8. 非IE内核浏览器支持activex插件
  9. EDEM后处理导出颗粒信息
  10. 线性方程组解的数目判定
  11. Pytroch相关操作(1)
  12. 微信公众号隐藏右上角三个点分享功能
  13. vue项目,地址栏中含有#是什么意思?如何去掉?
  14. CPU卡指令文件读取算法
  15. LA4329 PingPong (线段树)
  16. 经常使用传感器协议3:CJ/T-188 冷热量表协议解析2
  17. 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具
  18. 福昕阅读器解除安全阅读模式
  19. 新生课题研究---人工智能
  20. 如何删除WORD空白页

热门文章

  1. R语言之导入数据源(一)
  2. springboot+knife4j初体验
  3. opencv从内存缓冲区中读取图像数据
  4. 【调剂】广东省杰青广州大学范立生教授课题组接收计算机学硕调剂
  5. 互联网的十条常见盈利模式
  6. QQ手游微信互通服务器,使命召唤手游QQ和微信互通吗 能不能跨平台一起玩
  7. JavaScript的五种基本数据类型
  8. 世界著名博物馆艺术经典(海南大学-知到)
  9. python中表示类的公有成员_Python面向对象 | 类的成员
  10. 老鼠走迷宫(递归实现)