Python对某音乐论坛进行简单的采集

今天简单的用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

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值