环境使用:
- Python 3.8
- Pycharm
模块使用:
- requests >>> 数据请求 第三方模块 pip install requests
- re
如果安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
(如果你觉得安装速度比较慢, 你可以切换国内镜像源) - 在pycharm中点击Terminal(终端) 输入安装命令
基本流程思路: <通用>
一. 数据来源分析
- 去采集一个数据, 确定我们想要内容是什么?
- 通过开发者工具进行抓包分析, 分析这些数据内容 可以从哪里获取
浏览器自带工具 F12 或者鼠标右键点击检查
- 去分析地址是来自于哪里?
- 通过播放url地址里面一段参数, 去通过搜索找寻数据包
二. 代码实现的过程
- 发送请求, 对于刚刚分析得到数据包发送请求
- 获取数据, 获取服务器返回响应数据 【 response 】
- 解析数据, 提取我们想要数据内容 url地址以及标题
- 保存数据, 把内容保存本地文件夹
代码
导入模块
import requests # 数据请求模块 第三方模块 pip install requests
import re # 正则表达式 内置模块 不需要安装
爬虫模拟浏览器对于url地址发送请求, 获取服务器返回响应数据
发送请求:
伪装模拟 headers 可以直接去开发者工具里面复制粘贴
headers请求头字典数据类型, 构建完整键值对形式 调用requests模块里面get方法对于url地址发送请求, 并且携带上headers请求头伪装 最后用response变量接受返回数据 response = requests.get(url=url,
headers=headers) <Response [200]> <> 表示对象, response响应对象 200状态码表示请求成功获取数据:
response.text 获取响应对象文本数据 字符串数据类型
response.json() 获取响应json字典数据 字典数据类型 <更加方便取值>数据解析:
字典取值方式, 可以直接根据键值对提取数据内容
根据冒号左边的内容<键>提取冒号右边的内容<值>
for page in range(5, 11):
print(f'正在采集第{page}页的数据内容')
link = f'https://v.huya.com/g/all?set_id=51&order=hot&page={page}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
}
response = requests.get(url=link, headers=headers)
# print(response.text)
# 从哪里<response.text里面>找什么数据<li data-vid="(\d+)"> \d+ 表示匹配一个或者多个数字
video_id_list = re.findall('<li data-vid="(\d+)">', response.text)
print(video_id_list)
for video_id in video_id_list:
url = f'https://liveapi.huya.com/moment/getMomentContent?videoId={video_id}&uid=&_=1652789442223'
response = requests.get(url=url, headers=headers)
# print(response.json()['status'])
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, '保存成功')