提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录- 前言
- 1.发送请求,对于https: // www.acfun.cn / v / ac10863748视频详情页发送请求
- 2. 获取数据, 获取网页源代码
- 3.解析数据,提取m3u8 url地址以及视频标题
- 4.发送请求,对于m3u8 url地址发送请求
- 5.保存数据
- 一、操作如下:
- 1.发送请求,对于https: // www.acfun.cn / v / ac10863748视频详情页发送请求
- 2. 获取数据, 获取网页源代码
- 如上图可以看到,接收的数据也在js里面,这里直接用正则的方法来获取
- 3.解析数据,提取m3u8 url地址以及视频标题
- 对于找到的其实有backupUrlx4组,但是为啥只取第一组呢?
- 可以看到,下标为0的那组才是最大的,所以择优选择第一组,具体网址具体分析
- 4.发送请求,对于m3u8 url地址发送请求
- 5.保存数据
- 使用tqdm遍历就可以将请求网址分出来的ts直接整合,使用ab的方式进行拼接,最后得到一个完整的视频
- 至于为啥要拼接链接,主要是ts的连接不全,需要去NetWork中寻找匹配的网址,拼成可以播放的ts文件
- 总结
前言 1.发送请求,对于https: // www.acfun.cn / v / ac10863748视频详情页发送请求 2. 获取数据, 获取网页源代码 3.解析数据,提取m3u8 url地址以及视频标题 4.发送请求,对于m3u8 url地址发送请求 5.保存数据 一、操作如下: 1.发送请求,对于https: // www.acfun.cn / v / ac10863748视频详情页发送请求
url="Ac--视频播放网页地址"
headers = {
"User-Agent": '自己的请求头'
}
response = requests.get(url, headers=headers)
print(response.text)
2. 获取数据, 获取网页源代码
如上图可以看到,接收的数据也在js里面,这里直接用正则的方法来获取
3.解析数据,提取m3u8 url地址以及视频标题
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1', class_='title').text
# print(title)
m3u8_url = re.findall('backupUrl(.*?)"]', response.text)[0].replace('"', '').split("\")[2]
# 使用re对js数据进行提取
对于找到的其实有backupUrlx4组,但是为啥只取第一组呢?
可以看到,下标为0的那组才是最大的,所以择优选择第一组,具体网址具体分析
4.发送请求,对于m3u8 url地址发送请求
# 4.发送请求,对于m3u8 url地址发送请求
m3u8_data = requests.get(url=m3u8_url, headers=headers).text
# print(m3u8_data)
# sub替换
m3u8_data = re.sub('#EXTM3U', "", m3u8_data)
m3u8_data = re.sub('#EXT-X-VERSION:d', "", m3u8_data)
m3u8_data = re.sub('#EXT-X-TARGETDURATION:d', "", m3u8_data)
m3u8_data = re.sub('#EXT-X-MEDIA-SEQUENCE:d', "", m3u8_data)
m3u8_data = re.sub('#EXT-X-ENDLIST', "", m3u8_data)
m3u8_data = re.sub('#EXTINF:d.d+,', "", m3u8_data).split()
for i in tqdm(m3u8_data):
ts_url = "https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/" + i
print(ts_url)
5.保存数据
使用tqdm遍历就可以将请求网址分出来的ts直接整合,使用ab的方式进行拼接,最后得到一个完整的视频
至于为啥要拼接链接,主要是ts的连接不全,需要去NetWork中寻找匹配的网址,拼成可以播放的ts文件
for i in tqdm(m3u8_data):
ts_url = "https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/" + i
print(ts_url)
# 5.保存数据
ts_content = requests.get(url=ts_url, headers=headers).content
with open("video/"+title + ".mp4", 'ab') as f:
f.write(ts_content)
print(title + '.mp4下载完成')
总结
这是对爬取视频的一次体验,也开启了我对视频爬取的新征程,闲暇时刻可以挑战一下自己,当然,只是自己拿来学习练习的。



