赞
踩
[在线播放我独自升级 第03集 - 高清资源](https://www.physkan.com/ph/175552-8-3.html)
https://leshiyuncdn.36s.top/20240121/0RS6t7a1/2000kb/hls/index.m3u8
leshiyuncdn.36s.top
这个的时候
https://bfnb1sx.phvod.top/?url=O0O0OlHnRp0hcpHM6Ly9sZXNoO0O0OXl1bmNkbi4zNnMuo000oG9wLzIwMjQwMTIxLzBSUzZ0N2ExL2luZGV4Lm0zo000oTgoo00o&next=//www.physkan.com/ph/175552-8-4.html
O0O0OlHnRp0hcpHM6Ly9sZXNoO0O0OXl1bmNkbi4zNnMuo000oG9wLzIwMjQwMTIxLzBSUzZ0N2ExL2luZGV4Lm0zo000oTgoo00o
的时候
https://www.physkan.com/ph/175552-8-3.html
里面含有我们搜索的内容class M3U8Spider(scrapy.Spider): # 爬虫文件名 name = "m3u8" # 可访问的域名列表 allowed_domains = ["www.physkan.com", 'bfnb1sx.phvod.top', 'leshiyuncdn.36s.top', 'tscdn.hyz1.top'] # 起始地址 start_urls = [ "https://www.physkan.com/ph/175552-8-3.html"] # 视频存储路径 video_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'video') # 确保文件创建好 os.makedirs(video_path, exist_ok=True) # m3u8文件路径 m3u8_path = os.path.join(video_path, 'index.m3u8') # ts文件路径 ts_info_path = os.path.join(video_path, 'ts.txt')
def parse(self, response):
# 获取网页源码
page_source = response.text
# 分析源码可以发现需要的地址在script的player_aaaa中
# 通过正则匹配获取
pattern = r'var player_aaaa=({.*?})</script>'
url_info_str = re.findall(pattern, page_source, re.DOTALL)[0]
# json格式转换为字典,方便拿数据
url_info_dict = json.loads(url_info_str)
# 拼接m3u8路径
m3u8_info_url = 'https://bfnb1sx.phvod.top/?url=' + url_info_dict['url']
yield scrapy.Request(url=m3u8_info_url, callback=self.get_m3u8_url)
def get_m3u8_url(self, response):
page_source = response.text
pattern = r'var config = ({.*?})'
m3u8_info_str = re.findall(pattern, page_source, re.DOTALL)[0]
m3u8_info_dict = json.loads(m3u8_info_str)
m3u8_url = m3u8_info_dict['url']
m3u8_url = m3u8_url.rsplit('/', 1)[0] + '/2000kb/hls/index.m3u8'
yield scrapy.Request(url=m3u8_url, callback=self.get_ts_list)
file '视频路径.ts'
def get_ts_list(self, response): # 获取页面txt信息 page_source = response.text # 保存在index.m3u8文件在本地 with open(self.m3u8_path, mode='wt', encoding='utf8') as fp: fp.write(page_source) # 使用正则过滤拿出ts路径 ts_urls = re.findall(r'https://tscdn.hyz1.top/[^\s]+.ts', page_source) # 保存的ts视频文件需要按照合成视频ffmpeg的格式拼接 with open(self.ts_info_path, mode='wt', encoding='utf8') as fp: for ts in ts_urls: file_name = ts.rsplit('/', 1)[-1] file_path = os.path.join(self.video_path, file_name) # 保存ts文件,保存的为ts文件路径 fp.write(f"file '{file_path}'" + '\n') # 异步发起ts视频文件的请求 yield scrapy.Request(url=ts, callback=self.save_ts_file, meta={'file_path': file_path})
def save_ts_file(self, response):
# 保存ts文件本地
file_path = response.meta.get('file_path')
with open(file_path, mode='wb') as fp:
fp.write(response.body)
# 输出日志写不写都行
self.log(f'保存成功:>>>{file_path.rsplit("/", 1)[-1]}')
拼接ts文件为MP4视频文件
合成MP4视频
file '视频路径.ts'
def close(spider, reason):
# 爬虫执行完毕以后,拼接视频 工具:ffmpeg
os.chdir(f'{spider.video_path}')
os.system(f'ffmpeg -f concat -safe 0 -i ts.txt -c copy output.mp4')
免责声明
本爬虫仅用于收集特定网站的信息,目的是进行数据分析,不得用于非法目的或侵犯他人隐私。对于因使用本爬虫造成的任何损失或法律责任,本人概不负责。
本爬虫的数据可能存在不准确、不完整或不可用的情况,对于用户或第三方可能因此造成的任何损失,本人概不负责。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。