今天简单的用Python来采集一下某论坛的歌曲
环境使用
Python 3.10
Pycharm
模块使用
requests --> 发送请求 pip install requests
execjs --> pip install execjs
re 正则
源码和视频讲解都打包好了,文末名片自取
基本流程
一、数据来源分析
1.明确需求
明确采集的网站以及数据内容
- 网址: https://****/thread-192873.htm
- 数据: 歌曲内容(播放链接) / 歌曲标题
2.抓包分析
通过浏览器开发者工具分析对应的数据位置
本次抓包分析都是在浏览器中进行操作
- 打开开发者工具
- F12 / 右键点击检查选择network(网络)
- 刷新网页
- 让本网页的数据内容重新加载一遍
- 通过关键字搜索找到对应数据位置
- 关键字: 需要什么数据就搜什么
- 数据使用播放链接中一段参数即可
- 关键字: 需要什么数据就搜什么
需要歌曲播放链接 -> 开发者工具 -> 网络 -> 媒体
如何确定那个歌曲链接是我们需要的:
- 直接复制链接地址, 在新的浏览器窗口页面进行访问
- 两个链接都可以播放歌曲内容, 如何进行选择呢?
分析歌曲链接如何生成的 -> 请求那个数据包地址, 能够得到这个歌曲链接
(通过关键字搜索)
简单总结
1.通过开发者工具 -> 网络 -> 媒体 -> 播放地址 (两个链接地址)
https://***/get_music.php (1)
分析这个链接是如何生成的
https://*********/C400001KBxQw0PWq7Y.m4a (2)
直接分析这个链接是找不到生成位置 (真实来源是从1链接跳转过来的)
通过分析可以发现, 1链接重定向, 访问1链接, 可以直接跳转2链接
2.https://******.php?key=…&p=… 链接 有两个参数 key p
通过开发者工具搜索发现, key和链接都是在 https://hifini.com/thread-192873.htm 网页源代码中有
p值是通过 https://*****/view/js/dm.js JS代码 -> 调用generateParam函数返回值
二、代码实现步骤
1.发送请求
模拟浏览器对于url地址发送请求
# 导入数据请求模块 import requests """发送请求"""
# 模拟浏览器
headers = {
# User-Agent 用户代理, 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
}
# 请求网址:
url = 'https://****/thread-192873.htm' # 发送请求
response = requests.get(url=url, headers=headers)
2.获取数据
获取服务器返回响应数据
3.解析数据
提取我们需要的数据内容
正则表达式简单使用
re.findall(‘数据’, ‘数据源’) -> 找到所有你想要的数据
从什么地方, 去匹配什么数据
需要什么数据 -> 找到数据对应位置, 前后复制一部分内容, 把你数据用(.*?) 代替即可
# 提取歌名
title = re.findall("title: '(.*?)',", html)[0] # 提取链接地址
url_ = re.findall("url: '(.*?)'", html)[0] # 加密参数
data = re.findall("generateParam\('(.*?)'\)", html)[0] """根据JS代码, 获取P值"""
# 读取js代码
js_file = open('音乐论坛.js', encoding='utf-8').read() # 编译js代码
js_code = execjs.compile(js_file) # 调用JS代码加密函数
p = js_code.call('generateParam', data) # 构建完整的音乐播放地址
music_url = 'https:/****/' + url_ + p
4.保存数据
获取歌曲内容保存本地文件
# 对于歌曲链接发送请求获取歌曲内容
music_content = requests.get(url=music_url, headers=headers).content # 数据保存
with open('music\\' + title + '.mp3', mode='wb') as f: # 写入数据
f.write(music_content)
5.批量采集
分析请求链接/参数变化规律
- https://***/thread-192873.htm
- https://***/thread-26041.htm
- https://***/thread-1227.htm
通过分析对比: 歌曲资源贴链接ID变化
- 只要获取所有帖子ID就可以获取所有歌曲内容
- 或者说获取所有资源贴链接
基本流程
一.数据来源分析
- 1.明确需求
-网站: https://*****/forum-1.htm
-数据: 帖子ID / 帖子链接 - 2.抓包分析
第一页: https://****/forum-1-1.htm?orderby=lastpid
第二页: https://****/forum-1-2.htm?orderby=lastpid
第三页: https://*****/forum-1-3.htm?orderby=lastpid