requests爬取视频片段并整合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

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. 获取数据, 获取网页源代码

requests爬取视频片段并整合

如上图可以看到,接收的数据也在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组,但是为啥只取第一组呢?

requests爬取视频片段并整合

可以看到,下标为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下载完成')

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

上一篇:爬虫学习3---requests库深入学习


下一篇:C++设计模式——职责链模式