Copy
import os
import requests
from multiprocessing.pool import ThreadPool
class SpiderMovieFromChenYu:
def __init__(self, save_ts_path, save_movie_path, fail_ts_list=[], ):
self.save_ts_path = save_ts_path
self.save_movie_path = save_movie_path
self.fail_ts_list = fail_ts_list
self.headers = {
'Referer': 'http://www.chenyutv.com/',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
def mkdir_directory(self):
if not os.path.exists(self.save_ts_path):
os.mkdir(self.save_ts_path)
if not os.path.exists(self.save_movie_path):
os.mkdir(self.save_movie_path)
def get_ts(self, number, flag=False):
play_url = 'https://sina.com-h-sina.com/20180815/9998_f9aa34bf/1000k/hls/c0cdc4673f4%03d.ts' % number
ts_number = play_url.split('/')[-1]
if ts_number not in os.listdir(self.save_ts_path):
try:
session = requests.session()
response = session.get(play_url, headers=self.headers, timeout=60)
if response.status_code == 200:
with open(os.path.join(self.save_ts_path, ts_number), 'wb') as f:
f.write(response.content)
f.close()
if flag:
self.fail_ts_list.remove(number)
except Exception as e:
if number not in self.fail_ts_list:
self.fail_ts_list.append(number)
def check_ts(self):
print("开始检查:")
print(self.fail_ts_list)
while self.fail_ts_list:
for number in self.fail_ts_list:
self.get_ts(number, True)
print("%s:下载完毕" % number)
print(self.fail_ts_list)
print("ts 文件下载完成!")
self.get_video()
def get_video(self):
ts_list = os.listdir(self.save_ts_path)
ts_list.sort()
ts_lists = [ts for ts in ts_list]
for ts in ts_lists:
with open(os.path.join(self.save_ts_path, ts), 'rb') as f1:
with open(os.path.join(self.save_movie_path, '明日的我与昨日你的约会.mp4'), 'ab') as f2:
f2.write(f1.read())
print("%s:写入完成" % ts)
if __name__ == '__main__':
min_number = int(input('请输入ts的起始数字>>:').strip())
max_number = int(input('请输入ts的结尾数字>>:').strip()) + 1
save_ts_path = input('请输入ts保存文件路径>>:').strip()
save_movie_path = input('请输入视频保存文件路径>>:').strip()
spider = SpiderMovieFromChenYu(save_ts_path, save_movie_path)
spider.mkdir_directory()
pool = ThreadPool(100)
pool.map(spider.get_ts, range(min_number, max_number))
pool.close()
pool.join()
spider.get_ts()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!