前言💨
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
前文内容💨
Python爬虫入门教程01:豆瓣Top电影爬取
Python爬虫入门教程02:小说爬取
Python爬虫入门教程03:二手房数据爬取
Python爬虫入门教程04:招聘信息爬取
Python爬虫入门教程05:B站视频弹幕的爬取
Python爬虫入门教程06:爬取数据后的词云图制作
Python爬虫入门教程07:腾讯视频弹幕爬取
Python爬虫入门教程08:爬取csdn文章保存成PDF
Python爬虫入门教程09:多线程爬取表情包图片
Python爬虫入门教程10:彼岸壁纸爬取
Python爬虫入门教程11:新版王者荣耀皮肤图片的爬取
Python爬虫入门教程12:英雄联盟皮肤图片的爬取
Python爬虫入门教程13:高质量电脑桌面壁纸爬取
Python爬虫入门教程14:有声书音频爬取
Python爬虫入门教程15:音乐网站数据的爬取
Python爬虫入门教程17:音乐歌曲的爬取
Python爬虫入门教程18:好看视频的爬取
Python爬取入门教程19:YY短视频的爬取
Python爬虫入门教程20:IP代理的爬取使用
Python爬虫入门教程21:付费文档的爬取
Python爬虫入门教程22:百度翻译JS解密
PS:如有需要 Python学习资料
以及 解答
的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答点击即可加入
基本开发环境💨
- Python 3.6
- Pycharm
相关模块的使用💨
import requests
import re
from tqdm import tqdm
import os
安装Python并添加到环境变量,pip安装需要的相关模块即可。
💥确定目标需求
既然选择爬取视频了,那肯定优先选择小姐姐的视频呀😍
懂得都懂~
💥网页数据分析,找寻数据来源
A站视频是m3u8格式,整个视频分为很多小段,一段对应一个ts文件。
所以只需要找到这个m3u8的数据来源就可以获取所有的ts文件。
url链接的请求参数 pkey 是会改变的。但是这个参数是可以在网页源代码中找到的。包括m3u8的请求链接也是在网页源代码中可以获取的。
💥整体思路
1、请求视频地址,获取源代码中的m3u8的url地址。
2、请求m3u8的地址,获取所有的ts文件地址
3、保存ts文件并且合并ts文件成mp4视频格式
💥实现代码
import requests
import re
from tqdm import tqdm
import os
def change_title(title):
pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |'
new_title = re.sub(pattern, "_", title) # 替换为下划线
return new_title
def get_response(html_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=html_url, headers=headers)
return response
def save(name, video, title):
path = f'{name}\\'
if not os.path.exists(path):
os.makedirs(path)
with open(path + title + '.ts', mode='wb') as f:
f.write(video)
def get_m3u8_url(html_url):
html_data = get_response(html_url).text
m3u8_url = re.findall('backupUrl(.*?)\"]', html_data)[0].replace('"', '').split('\\')[-2]
title = re.findall('"title":"(.*?)"', html_data)[0]
new_title = change_title(title)
m3u8_data = get_response(m3u8_url).text
m3u8_data = re.sub('#EXTM3U', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-VERSION:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-TARGETDURATION:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-MEDIA-SEQUENCE:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-ENDLIST', "", m3u8_data)
m3u8_data = re.sub(r'#EXTINF:\d\.\d,', "", m3u8_data)
m3u8 = m3u8_data.split()
for link in tqdm(m3u8):
ts_url = 'https://tx-safety-video.acfun/mediacloud/acfun/acfun_video/hls/' + link
video = get_response(ts_url).content
ts_title = link.split('?')[0].split('.')[1]
save(new_title, video, ts_title)
print(f'{title}已经下载完成,请验收....')
if __name__ == '__main__':
video_id = input('请输入你要下载的视频ID:')
url = f'https://www.acfun/v/{video_id}'
print('正在下载请稍后.....')
get_m3u8_url(url)
最简单的合并方式有手就行
更多推荐
Python爬虫入门教程23:A站视频的爬取,解密m3u8视频格式
发布评论