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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第47天

LeetCode 647. 回文子串 链接 class Solution { public:int countSubstrings(string s) {int res 0;for(int i 0; i < s.size(); i) {res extend(s, i, i, s.size());res extend(s, i, i 1, s.size());}return res;}int extend(const string& s, int i, int j, i…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下&#xff0c;不同服务之间频繁调用&#xff0c;对于某个具体的服务而言&#xff0c;可能会面临高并发场景。在这样的情况下&#xff0c;提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题&#xff0c;比如业务处理耗时过长、…

javac 生成 jar脚本命令

1 指定编译输出目录的选项 ps: java代码全路径 javac -d 是用于指定编译输出目录的选项&#xff0c;如果不执行这句&#xff0c;可能会导致修改了java代码后&#xff0c;再次生成的jar 没生效 javac -d. D:\TestAspect\app\src\main\java\com\ljl\testaspect\ui\Modify.java …

SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示

前提&#xff1a;zookeeper安装并成功运行 1 pom依赖 <dependency><groupId>com.github.kuhn-he</groupId><artifactId>elastic-job-lite-spring-boot-starter</artifactId><version>2.1.53</version> </dependency> 2 yml配…

Java异常有哪些

目录 内存溢出异常(OutOfMemoryError) IO异常(IOException) 文件找不到异常(FileNotFoundException) 类找不到异常(ClassNotFoundException) 类转换异常(ClassCastException) 没有这个方法异常(NoSuchMethodException) 索引越界异常(IndexOutOfBoundsException) SQL异常…

后端开发刷题 | 笔试

1.关于C的纯虚函数&#xff0c;下列说法错误的是&#xff08;&#xff09; A 纯虚函数不能实例化对象&#xff0c;拥有纯虚函数的类是抽象类 B 纯虚函数不能做指针和引用 C 纯虚函数声明的最后面“0”并不表示函数返回值为0&#xff0c;它只起形式上的作用 D 虚函数和纯虚函数都…

uniapp 重置表单数据

场景 例如有数据如下 data(){return {queryForm:{value1:undefined,}} } 点击重置时候想重置form的数据&#xff0c; 操作 Object.assign(this.$data.queryForm, this.$options.data().queryForm); 就可以重置数据

FlowUs横向对比几款笔记应用的优势所在

FlowUs作为一个本土化的生产力工具&#xff0c;在中国市场的环境下相对于Notion有其独特的优势&#xff0c;尤其是在稳定性和模板适应性方面。 尽管Notion在笔记和生产力工具领域享有极高的声誉&#xff0c;拥有着诸多创新功能和强大的生态系统&#xff0c;但它并不一定适合每…

VMware三种网络模式---巨细

文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置&#xff1a; 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式&#xff1a; 桥接模式&#xff1a;默认与宿主机VMnet0绑…

基于Java中的SSM框架实现商店积分管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现商店积分管理系统演示 摘要 随着时代的发展&#xff0c;信息化的管理手段已被普遍应用于企业的日常运作中。在当今竞争激烈的市场中&#xff0c;消费者的需求量日益增长&#xff0c;而商品信息的管理也变得越来越复杂&#xff0c;因此&#xff0c;实施…

9. 机器学习汇总(数据、模型、流程、心血管疾病预测)

1. 数据 表格类数据 tabular data互相独立&#xff0c;互不影响离散型数据的数字化&#xff1a; zero index&#xff08;状态很少时&#xff09; 0,1,2,…, N-1 one - hot&#xff08;状态比较多时&#xff09; 1个特征变N个特征[0, 0, 1, …, 0] 连续型数据的数字化问题&…

14. Hibernate 一对多双向关联映射

1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程&#xff0c;你将了解到&#xff1a; 如何实现一对多关联映射&#xff1b; 如何实现双向一对多关联映射&#xff1b; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多&…

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具&#xff0c;主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…

深入理解Linux网络(八):内核如何发送网络包

深入理解Linux网络&#xff08;八&#xff09;&#xff1a;内核如何发送网络包 一、总览二、网卡启动准备三、ACCEPT 创建新 SOCKET四、开始发送数据send 系统调⽤实现传输层处理传输层拷贝传输层发送 网络层发送原理邻居⼦系统网络设备子系统软中断调度igb网卡驱动发送发送完成…

git revert 回退 中间的一笔提交

git revert abcdef git如何回退中间一次提交 • Worktile社区

Python 实现PDF和TIFF图像之间的相互转换

PDF是数据文档管理领域常用格式之一&#xff0c;主要用于存储和共享包含文本、图像、表格、链接等的复杂文档。而TIFF&#xff08;Tagged Image File Format&#xff09;常见于图像处理领域&#xff0c;主要用于高质量的图像文件存储。 在实际应用中&#xff0c;我们可能有时需…

wefwefwe

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

在 ArkTS 中集成 C 语言模块来管理文件描述符

文章目录 前言ArkTS模块C语言模块C模块代码 总结 前言 在现代开发中&#xff0c;尤其是在处理文件操作时&#xff0c;使用文件描述符&#xff08;fd&#xff09;是一种常见的方法。ArkTS提供了一种强大的方式来与底层C代码交互&#xff0c;使我们能够利用C语言的性能优势来管理…

LeetCode-day24-2766. 重新放置石块

LeetCode-day24-2766. 重新放置石块 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个下标从 0 开始的整数数组 nums &#xff0c;表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo 。 在 moveFrom.leng…

dsa加训

refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况&#xff0c;总计2^30种情况&#xff0c;显然T。 不过我们可以发现&#xff1a;若第i行的某个灯亮了&#xff0c;那么有且仅有第i行和第…