# -*- coding: utf-8 -*-
"""
Created on Wed Oct  6 10:47:47 2021@author: yingziE-mail:guotaomath@163.com
"""
'''
目标:找到目标网页,源代码中已找到m3u8,且通过抓包工具知道,
第一层m3u8嵌套第二层m3u8(真实ts的下载地址),视频无加密
''''''
流程:1. 拿到网页源代码2. 从网页源代码提取第一层m3u8的url3. 解析第一层的m3u8,获取第二层m3u8的url4. 解析第二层的m3u8,分别下载相应的ts5. 合并ts
'''
import requests
import re
import asyncio
import aiohttp
import aiofiles
import osdef get_m3u8_url(url):  #输入网页地址,得到网页地址内的m3u8的地址resp = requests.get(url)resp.encoding = "utf-8"obj = re.compile(r'now="(?P<url>.*?)"',re.S) #用来提取m3u8地址m3u8_url = obj.search(resp.text).group("url")return m3u8_urldef down_first_m3u8(url):resp = requests.get(url)resp.encoding = "utf-8"with open("法律之地.txt",mode="wb") as f:f.write(resp.content)def get_second_m3u8_url(url):with open("法律之地.txt",mode="r",encoding="utf-8") as f:for line in f:if line.startswith("#"):continuem3u8_url = url.split(r"/20210704")[0]+line.strip()return m3u8_urldef  down_second_m3u8(url):resp = requests.get(url)resp.encoding = "utf-8"with open("法律之地2.txt",mode="wb") as f:f.write(resp.content)async def download_ts(url,name,session):async with session.get(url) as resp:async with aiofiles.open(f"video/法律之地/{name}",mode="wb") as f:await f.write(await resp.content.read())print(f"{name}下载完毕!!")async def aio_download():tasks = []async with aiohttp.ClientSession() as session:    # 提前准备好sessionasync with aiofiles.open("法律之地2.txt",mode="r",encoding="utf-8") as f:async for line in f:if line.startswith("#"):continuets_url = line.strip()task = asyncio.create_task(download_ts(ts_url,ts_url.rsplit("/",1)[1],session))tasks.append(task)await asyncio.wait(tasks)# def merge_ts_1():
#     lst = []
#     with open("法律之地2.txt",mode="r",encoding="utf-8") as f:
#         for line in f:
#             if line.startswith("#"):
#                 continue
#             name = line.strip().rsplit("/",1)[1]
#             lst.append(f"video/法律之地/{name}")
#     s = "+".join(lst)
#     os.system(f"copy /b {s} video.mp4")
#     print("搞定!!")def merge_ts_2():with open("法律之地2.txt",mode="r",encoding="utf-8") as f:with open("video.ts",'wb+') as f1:for line in f:if line.startswith("#"):continuename = line.strip().rsplit("/",1)[1]if os.path.exists(os.path.join(f"video/法律之地/{name}")):ts_video_path = os.path.join(f"video/法律之地/{name}")f1.write(open(ts_video_path,'rb').read())print("搞定!!")     if __name__ == '__main__':url = "https://www.daquan.cc/play/?15855-1-0.html"m3u8_first_url = get_m3u8_url(url)   # 2.1 获取第一层的m3u8的地址down_first_m3u8(m3u8_first_url)      # 3.1 解析第一层的m3u8m3u8_second_url = get_second_m3u8_url(m3u8_first_url) # 3.2获取第二层m3u8的urldown_second_m3u8(m3u8_second_url)    # 4.1 解析第二层的m3u8asyncio.create_task(aio_download())  # 4.2 调用异步协程,加快下载ts文件merge_ts_2()  # 5合并ts文件


后续改进:

  • 现在只启用了异步协程下载ts文件,未添加线程,文件量太大时,协程等待 await会强制退出,下载电影后半部分没下完,后续学会添加线程了再加上去,应该可以解决这个问题。
  • merge_ts_1这个函数不知为何用不了,用了merge_ts_2函数替代了

爬虫项目——m3u8后缀的电影相关推荐

  1. python爬电影_Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...

  2. Python爬虫项目-豆瓣网电影排名TOP250

    开发背景:该项目是给电影爱好者提供的,利用爬虫爬取豆瓣网上电影榜排名TOP250的电影,然后选取自己最喜欢的电影看,有电影名称,电影链接,导演,演员,以及有多少人观看并评分 功能介绍:实时爬取豆瓣网上 ...

  3. 【python教程入门学习】Python零基础入门爬虫项目

    Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...

  4. python爬虫项目-32个Python爬虫实战项目,满足你的项目慌

    原标题:32个Python爬虫实战项目,满足你的项目慌 爬虫项目名称及简介 一些项目名称涉及企业名词,小编用拼写代替 1.[WechatSogou]- weixin公众号爬虫.基于weixin公众号爬 ...

  5. python爬虫项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  6. python爬虫项目-32个Python爬虫项目让你一次吃到撑

    今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- ...

  7. python爬虫项目-23个Python爬虫开源项目代码

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  8. python爬虫新手项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  9. python爬虫教程推荐-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

最新文章

  1. 【原创】浅说windows下的中断请求级IRQL
  2. larvel 中的api.php_Laravel API 系列教程(一): 基于 Laravel 5.5 构建 测试 RESTful API...
  3. vue事件总线_[面试] 聊聊你对 Vue.js 框架的理解
  4. 使用IDEA 创建SpringBoot项目
  5. 2评分标准多少分_高新企业认定评分标准,需要多少分才能拿到高新认证证书...
  6. 入侵检测——WebCrack
  7. 聊聊计算和这个世界(上)
  8. python画喜羊羊代码_python学习笔记7-字典
  9. java指纹读取_Microsoft指纹读取器-迷你评论
  10. 站群程序-免费站群程序排名
  11. C语言abs和labs函数详解和示例
  12. idea vue.js插件安装
  13. Python实现抓取链接/分词/索引/搜索关键词——简单搜索引擎
  14. Mac 系统不兼容移动硬盘无法识别怎么办
  15. IBM T61 笔记本风扇控制软件
  16. 盾构隧道区间联络通道
  17. 万字说透 NFT 的发展简史、价值及未来
  18. unity3d开发实战《啪啪三国》技术详解!
  19. [收藏] 深入浅出存储性能评估方法论
  20. matlab中的dc motor的介绍,DC-motor 这是matlab里面比较经典的直流电机的仿真模型,初学者在不 条件下,可以 240万源代码下载- www.pudn.com...

热门文章

  1. 敏捷开发基础篇(一)-流程与角色基本概念
  2. Windows Tips
  3. 时间定位表达式-用于时间的加、减调整
  4. 一道有意思的概率应用题
  5. Spring Data JPA 梳理 - JPA是什么
  6. (一)Maven 基本概念——根目录、项目创建、坐标
  7. Ajax_HTTP请求以及响应
  8. 伪响应式开发(PC和Mobile分离)
  9. JXL读取,写入Excel
  10. 实时数据库中的二级压缩技术