IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python爬取A站的视频 -> 正文阅读

[Python知识库]python爬取A站的视频

你见过A站的小姐姐吗?超级漂亮的哦

哈喽,大家好,今天给大家带来的是足足的干货,爬取A站视频。相信大家都看过短视频吧,那么有想过用Python把他们爬取回来吗?下面让我们一起学习视频的爬取下载方法吧!
1.引入所需包
这里需要注意的是几个可能不常见的包。首先是os包,这就是一个处理文件的包;tqdm库是会使完成某项任务在控制台进度条显示;zipfile 模块实现对 zip 文件的解压,在本次中主要是压缩视频文件为MP4。

import os
import zipfile
import requests
import re
from tqdm import tqdm

2.思路:
按照爬虫的常规思路,肯定要先分析网站,由于此次爬取的是视频格式,而网页上不断进入观看不同视频可以发现每个视频都有一个可以看作自己ID的代号,所以爬取网页链接就可以轻松得到了;然后就是如何爬取回来,在某一视频里分析可发现缓存的视频为ts格式只有2秒的,所以就是把这些2秒的文件都一一下载回来,然后再链接一起就可以得到完整视频了。

具体实现如下:

3.获取响应

首先设置一个想要下载视频的部分重要ID,通过正常的请求获得网页源码。在浏览器端打开A站然后搜索某词,本次爬取关键词是小姐姐,然后点开一个视频,网页链接上面可以找到其对应ID,这样通过requests请求就可以得到对应的源代码。其中设置UA比较随意,如有需要请另外添加参数。

video_id = input("请输入视频ID:")
url = f'https://www.acfun.cn/v/{video_id}'
headers = {
            # 'Referer': 'https://www.acfun.cn/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
}
html = requests.get(url=url, headers=headers).text

3.截取所需数据链接
源码有了,就是寻找视频链接并保存了,而在浏览器检查界面下,网络一栏下,点击XHR意为浏览器缓存的文件,大家都很轻松理解浏览器会自动帮我们缓存视频,而XHR正是显示缓存文件的请求(大部分为英文界面,那就是network下的XHR);点击清除,播放视频,可以看出有新请求出现,点击几个成功的请求,可以发现链接有其相同部分,在控制台源码中可以查到其属于backup标签下,那么利用正则表达式截取所有链接。(这里的链接是“假”视频链接,可以看作请求连接视频)

m3u8_url = re.findall('backupUrl(.*?)\"]', html)[0].replace('"', '').split('\\')[2]

4.获取标题
利用正则表达式从页面直接寻找标题。

title_search = '<title >(.*?) - AcFun弹幕视频网 - 认真你就输啦 \(\?\ω\?\)ノ- \( ゜- ゜\)つロ</title>'
title = re.findall(title_search, html)[0]

print(title)

5.筛选有用数据
大家爬取爬取之后就会发现,前面获取的多个视频链接响应的代码中带有我们需要的真正视频下载链接,其他无用信息,而我们需要的只是剔除无效信息,保留我们需要的链接,然后下载下来就OK了。

m3u8_data = requests.get(m3u8_url, headers=headers).text
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('#EXTINF:\d.\d+,', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-ENDLIST', '', m3u8_data).split()#.split()分割成列表

6.美化界面
通过链接爬取各个2s视频保存本地,为了界面更美就添加了一个进度条显示功能,也使爬虫的进行更加有序化,方便我们的观察。

# tqdm(m3u8_data) 进度条显示
for link in tqdm(m3u8_data):
    ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + link
    ts_name = link.split('.')[1]
    ts_content = requests.get(ts_url, headers=headers).content
    with open(filename+ts_name+'.ts', mode='wb') as f:
        f.write(ts_content)
        print(ts_name)

7.转化为MP4格式
使用zipfile方法将该文件夹里的ts文件压缩为MP4格式。

# 一个压缩方法
with zipfile.ZipFile(filename + f'{title}' + '.mp4', mode='w') as z:
    for file in files:
        path = filename + file
        z.write(path)
        os.remove(path)
print("已下载,请验收")

8.代码正常运行成功如下

最终在文件夹里会只有一个MP4格式的视频,此次爬取就到此为止了。
END
这次的A站小姐姐视频爬取就这样完美落幕了,小姐姐是真的漂亮,以后小编要慢慢欣赏,哈哈!
下附完整源码:

import os
import zipfile
import requests
import re
from tqdm import tqdm


video_id = input("请输入视频ID:")
url = f'https://www.acfun.cn/v/{video_id}'
headers = {
            # 'Referer': 'https://www.acfun.cn/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
}
html = requests.get(url=url, headers=headers).text
# 寻找ts文件url
m3u8_url = re.findall('backupUrl(.*?)\"]', html)[0].replace('"', '').split('\\')[2]
# print(m3u8_url)
# \转义
title_search = '<title >(.*?) - AcFun弹幕视频网 - 认真你就输啦 \(\?\ω\?\)ノ- \( ゜- ゜\)つロ</title>'
title = re.findall(title_search, html)[0]
# print(title)


filename = f'{title}\\'
if not os.path.exists(filename):
    os.mkdir(filename)
# 筛选有用数据
m3u8_data = requests.get(m3u8_url, headers=headers).text
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('#EXTINF:\d.\d+,', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-ENDLIST', '', m3u8_data).split()#.split()分割成列表
# print(m3u8_data)
# tqdm(m3u8_data) 进度条显示
for link in tqdm(m3u8_data):
    ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + link
    ts_name = link.split('.')[1]
    ts_content = requests.get(ts_url, headers=headers).content
    with open(filename+ts_name+'.ts', mode='wb') as f:
        f.write(ts_content)
        print(ts_name)


print('=='*100)
print("开始合并视频。。。。。。")
files = os.listdir(filename)
# 一个压缩方法
with zipfile.ZipFile(filename + f'{title}' + '.mp4', mode='w') as z:
    for file in files:
        path = filename + file
        z.write(path)
        os.remove(path)
print("已下载,请验收")
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:32:43  更:2022-02-22 20:34:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:33:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码