【爬虫】案例-获取cbh电影
以cupfox.in为例子:
观察ts文件和m3u8文件,可以知道一个完整的视频是由多个ts文件组合,而m3u8则是记录所有ts文件信息的文本
思路
1.先爬一个ts,测试能否观看
2.爬m3u8文件,通过正则分析出变化的部分
3.完整的把每个ts爬下来组合起来。
1.一个ts
import requestsurl = 'https://v.cdnlz3.com/20240802/25255_00ff1a4b/2000k/hls/819a23c20b1000173.ts'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36', 'referer':'https://www.cupfox.in/'}
response = requests.get(url)print(response.status_code)with open('video.ts', 'wb') as f:f.write(response.content)
2.观察m3u8文件内容

分析得出:819a23c20b1000(.*?).ts
3.完整代码:
import re
import requests
import time
import random
def get_m3u8():'''获取m3u8文件'''url = 'https://v.cdnlz3.com/20240802/25255_00ff1a4b/2000k/hls/index.m3u8'resp = requests.get(url).text# print(resp)ts_list = re.findall('819a23c20b1000(.*?).ts', resp)return ts_list
def get_response(ts_list):for ts in ts_list:url = f'https://v.cdnlz3.com/20240802/25255_00ff1a4b/2000k/hls/819a23c20b1000{ts}.ts'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36', 'referer':'https://www.cupfox.in/'}response = requests.get(url, headers=headers)try:with open('video.ts', 'ab') as f:f.write(response.content)print(f'下载完成,{ts+1}/{len(ts_list)}')time.sleep(random.uniform(1, 2))except Exception as e:print('报错原因是',e)if __name__ == '__main__':'''关键词.m3u8,它是一个文本文件,里面包含了多个ts'''a = get_m3u8() # 通过分析得出 # ts_list = re.findall('819a23c20b10(.*?).ts)', resp)get_response(a)
成功拿到,时长正确: