前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
俗话说的好:技能学了~就要用在自己喜欢得东西上!!
这我不得听个话~我喜欢小姐姐,跳舞的小姐姐
这不得用python把小姐姐舞采集下来~嘿嘿嘿
完整源码、素材皆可点击文章下方名片获取此处跳转
知识点:
-
采集基本流程
-
re正则表达式简单使用
-
requests
-
json数据解析方法
-
数据保存
采集网站:
开发环境:
-
Python 3.8
-
Pycharm
模块使用:
-
requests >>> pip install requests 第三方模块
-
re
安装模块:win + R 输入cmd 输入安装命令 pip install 模块名
如果出现爆红 可能是因为 网络连接超时 切换国内镜像源
基本流程(固定):
一. 数据来源分析
-
确定采集内容是什么? (目标网址, 网址里面数据)
-
通过开发者工具进行抓包分析, 分析我们想要数据 通过请求那个url地址可以获得
I. 通过分析可以知道 播放url地址是什么?
II. 通过播放地址, 去分析找寻, 数据包是在哪?
III. 通过两个数据包 请求参数对比, 可以知道 只要获取所有ID 就可以获取内容
(图片id MP4ID 音乐ID 还是什么ID 都可以去列表页面获取)
IV. 去分析 mp4ID可以从哪里获取 (一般情况都可以在列表页面获取)
我想要获取播放地址 >>> 要得到数据包 >>> 获取ID
二. 代码实现步骤 发送请求 获取数据 解析数据 保存数据
-
发送请求, 对于舞蹈列表页面发送请求
-
获取数据, 服务器返回数据内容
-
解析数据, 提取我们想要数据内容 ID
-
发送请求, 把ID传入到 数据包里面 发送请求
-
获取数据, 服务器返回数据内容
-
解析数据, 提取我们想要数据内容 标题 以及播放地址
-
保存数据, 把内容保存本地
-
多页数据采集
代码
(完整源码、素材皆可点击此处+获取)
导入模块
# 导入数据请求模块
import requests # 第三方模块 pip install requests 需要自行安装
# 导入re正则表达式
import re # 内置模块 不需要安装
# 导入格式化输出模块
import pprint # 内置模块 不需要安装
- 发送请求, 对于舞蹈视频列表页面发送请求
for page in range(1, 11):
print(f'正在爬取第{page}页的数据内容')
url = f'https:// **** .com/g/all?set_id=51&order=hot&page={page}'
# 爬虫是模拟浏览器对于服务器发送请求, 然后获取服务器返回数据内容
# user-agent: 用户代理 表示浏览器基本身份信息 (一种简单反反爬手段)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
# 通过requests模块里面get请求方式对于url地址发送请求, 并且携带上headers请求进行伪装, 最后用自定义变量response接收返回数据
response = requests.get(url=url, headers=headers)
# <Response [200]> 表示请求成功, 请求网址成功了 *** 200状态码表示请求成功, 但是不一定能够得到数据
- 获取数据, 服务器返回数据内容 response.text 获取响应文本数据
# print(response.text)
- 解析数据, 提取我们想要数据内容 视频ID
# 解析方式: css re xpath
# <li data-vid="676382675"> 想要数据 可以(.*?) 从response.text 里面去找寻这样数据内容
# .*? 是可以匹配任意字符(除了\n换行符以外) 如果你只是单纯提取数字 最好用 \d+ 匹配一个或者多个数字
video_ids = re.findall('<li data-vid="(\d+)">', response.text) # 返回列表数据
for video_id in video_ids: # 通过for循环遍历 提取列表里面元素 一个一个提取
# print(video_id)
-
发送请求, 把视频ID传入到视频数据包里面发送请求
-
获取数据, 服务器返回数据内容
# f 字符串格式化方法 {} 占位符
video_info = f'https:// **** .com/moment/getMomentContent?videoId={video_id}&uid=&_=1647433310180'
json_data = requests.get(url=video_info, headers=headers).json()
# print(json_data)
# pprint.pprint(json_data)
# 根据冒号左边的内容, 提取冒号右边的内容
- 解析数据
title = json_data['data']['moment']['title']
video_url = json_data['data']['moment']['videoInfo']['definitions'][0]['url']
- 保存数据 >>> 发送请求 并且获取数据
"""
response.text >>> 文本数据返回字符串数据
response.json() >>> json字典数据
response.content >>> 二进制数据
"""
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)
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!