直播平台就只有那么几个流批的,大家应该多少都看过,不是吧不是吧,不会没有不知道吧~
再众所周知,颜值区的主播一直都是还不错的,一般人顶不住,所以我们今天来一探深浅~
一、前面的前奏
1、使用的环境
- Python3.8
- pycharm专业版
2、模块安装
这是要用的模块
- requests
- re
- json
win+r打开搜索输入cmd按确定打开命令提示符窗口,输入pip install 加上你要安装的模块即可。下载速度慢的话换成国外的镜像源。
我还给大家准备了Python实现的五子棋游戏和超级玛丽源码,还有Python相关电子书和视频,都可以在左边扫码领取,没有软件或者不会安装也也可以。
二、爬虫流程
首先确定我们的需求是什么,以及数据来源分析。
通过开发者工具进行抓包分析,分析视频播放地址来自哪里。
得到视频播放url ,分析视频播放url 可以从哪里获取。
先获取所有视频的ID;
把这个ID传入视频数据包里面,就可以获取音频url地址以及视频标题;
音频url地址,可以进行保存数据;
代码实现步骤
发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据
发送请求, 对于视频数据包url地址
获取数据, 获取[服务器]返回的数据内容
解析数据, 提取我们想要的内容 视频url地址以及视频标题
保存数据
三、代码展示
导入模块
import requests # 数据请求模块
import pprint # 格式化输出模块
import re # 正则表达式
翻页分析请求url地址的变化规律,构建for循环。
for page in range(3, 11):
print(f'===================正在爬取第{page}页的数据内容===================')
url = f'https://v.****.com/g/all?set_id=31&order=hot&page={page}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
\d+匹配多个数字 视频ID 都是数字 想要的数据就用()
通过re模块里面findall方法,从response.text 里面匹配查询 <a href="//v.huya.com/play/(\d+).html" class="video-wrap"数据内容。
video_id_list = re.findall('<a href="//v.****.com/play/(\d+)\.html" class="vide-wrap"', response.text)
for video_id in video_id_list:
1、发送请求
对于视频数据包url地址
字符串格式化的方法,就是把 video_id 传入 url里面。
ur1 = f'https://liveapi.****.com/moment/getMomentContent?videoId={video_id}&uid=&_=1639224652506'
headers请求头,作用伪装python代码,模拟成浏览器对于服务器发送请求。
某些网站 不加headers会被反爬, 被识别出来是爬虫程序,服务器不会给你返回数据。
headers字典数据类型,键值对形势一个键对应一个值,键和值之间是用冒号隔开的。
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
通过requests这个模块里面get请求方法,对于url地址发送请求,并且携带上headers请求头进行伪装,最后response变量接收返回数据。
response = requests.get(url=url, headers=headers)
<Response [200]> response响应体对象 200 状态码,表示请求成功。
response.text 获取响应体的文本数据。
2、获取数据
获取[服务器]返回的数据内容。
返回json字典数据,对于后续解析数据会更加方便。
print(response.json())
pprint.pprint(response.json())
3、解析数据
提取我们想要的内容 视频url地址以及视频标题
对于字典提取数据, 有了解过吗?
就是根据冒号左边的内容,提取冒号右边内容。
title = response.json()['data']['moment']['title']
video_url = response.json()['data']['moment']['videoInfo']['definitions'][0]['url']
4、保存数据
需要对于视频url发送请求,获取二进制数据内容。
response.content获取响应体二进制数据内容。
video_content = requests.get(url=video_url, headers=headers).content
mode:保存方式
wb: w写入, b 二进制模式, wb 以二进制方式保存数据。
第一个 \ 转义字符 \表示 文件路径 video
with open('video\\' + title + '.mp4', mode='wb') as f:
f.write(video_content)
print(title, video_url)
完整代码
import requests
import pprint
import re
#视频讲解我放在评论区置顶了
for page in range(3, 11):
print(f'===================正在爬取第{page}页的数据内容===================')
url = f'https://v.****.com/g/all?set_id=31&order=hot&page={page}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
video_id_list = re.findall('<a href="//v.****.com/play/(\d+)\.html" class="vide-wrap"', response.text)
for video_id in video_id_list:
ur1 = f'https://liveapi.****.com/moment/getMomentContent?videoId={video_id}&uid=&_=1639224652506'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
title = response.json()['data']['moment']['title']
video_url = response.json()['data']['moment']['videoInfo']['definitions'][0]['url']
video_content = requests.get(url=video_url, headers=headers).content
with open('video\\' + title + '.mp4', mode='wb') as f:
f.write(video_content)
print(title, video_url)
代码里面所有的地址我都屏蔽了,大家自己改成小脑斧的原名吧。
兄弟们,看完了点个赞支持一下呗~
下次才有动力更新的更快撒!