当前位置: 首页 > news >正文

爬虫——爬取小音乐网站

爬虫有几部分功能???
    1.发请求,获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码
    2.解析我们想要的数据
    3.按照需求保存 

注意:开始爬虫前,需要给其封装

c345ba9c6b774d94b1eae4a97558814a.png

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}

爬虫分析:

第一步:从列表页抓取详情页面的链接

67a22993e4b548dab264c312cc472003.png

正则表达式:

<li\sclass="media\sthread\stap\s\s".*?>.*?<div\sclass="subject\sbreak-all">.*?<a\shref="(.*?)">(.*?)</a>

得到如下结果

3cf2dab9b1104a35932bc4ce910ba80c.png

从以上结果可以看出,此链接不可直接点击,缺少https://www.hifini.com/这一部分

https://www.hifini.com/thread-20945.htm

因此如下处理

   for i in result:
        # print(i)#元祖下标取值
        href = "https://www.hifini.com/"+i[0]
        name = i[1]
        print(href)
        print(name)
        print('======================')

c25d12de58394e50a8ae10c476cad5a4.png

第二步:获取歌曲播放资源

找到歌曲url的xpath:

music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'

代码:

#解析歌曲的播放组员
song_re = "music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'"
r = re.findall(song_re,song_html_data,re.S)
# print('歌曲信息',r)
for i in r:song_name = i[0]song_link = "https://www.hifini.com/"+i[1]print('歌名:',song_name)print("歌曲播放资源链接",song_link)print('++++++++++++++++')

9ef65f579d2d405daf4d544469d24d13.png

第三步:再次像歌曲播放资源链接发请求 获得二进制数据,进行保存

1.创建文件夹

#保存歌曲 先创建一个文件夹 导入os模块
#判断文件是否存在
if not os.path.exists('歌曲'):os.makedirs("歌曲")

2.创建文件流,将歌曲保存在文件夹中

with open('歌曲\{}.m4a'.format(song_name),'wb')as f:f.write(data_bytes)

代码:

import requests
import re
import osshouye_url = 'https://www.hifini.com/'
# 1.起始目标
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
response = requests.get(shouye_url, headers=headers)
#1.发请求,获得网页源码
def get_data(url):response = requests.get(url,headers=headers)# print(response.status_code)# print(response.text)if response.status_code == 200:return response.text
#2.解析我们想要的数据
def parse_data(data):#形参站位 模拟的就是爬虫爬取下来的源码z ='<li\sclass="media\sthread\stap\s\s".*?>.*?<div\sclass="subject\sbreak-all">.*?<a\shref="(.*?)">(.*?)</a>'result = re.findall(z,data,re.S)# print(result)# https://www.hifini.com/thread-20945.htmfor i in result:# print(i)#元祖下标取值href = "https://www.hifini.com/"+i[0]name = i[1]print(href)print(name)print('======================')get_song_link(href)#https://www.hifini.com/get_music.php?key=2Ydoqazb8E6jj+Nvl6rZLnuh3Fu1MRARle/srx5zQfZVMkPqsGrSzFHehon89oIENCUU19ru3GEJax60Ew
# 像详情页发请求 获得网页源码
def get_song_link(link):#link模拟的是详情页的urlsong_html_data = get_data(link)# print("详情页的网页源码",song_html_data)#解析歌曲的播放组员song_re = "music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'"r = re.findall(song_re,song_html_data,re.S)# print('歌曲信息',r)for i in r:song_name = i[0]song_link = "https://www.hifini.com/"+i[1]print('歌名:',song_name)print("歌曲播放资源链接",song_link)print('++++++++++++++++')#再次像歌曲播放资源链接发请求 获得二进制数据data_bytes = requests.get(song_link,headers=headers).content# print(data_bytes)#保存歌曲 先创建一个文件夹 导入os模块#判断文件是否存在if not os.path.exists('歌曲'):os.makedirs("歌曲")with open('歌曲\{}.m4a'.format(song_name),'wb')as f:f.write(data_bytes)
#对应的功能写在不同的函数里面 如果需要互用功能 互相调用即可
if __name__ == '__main__':h = get_data(shouye_url)parse_data(h)

结果:

5848239ec78742f48e0a71d1b0b5d214.png

8bb2da505c6247f4b647d0ba40b35165.png

 

相关文章:

爬虫——爬取小音乐网站

爬虫有几部分功能&#xff1f;&#xff1f;&#xff1f; 1.发请求&#xff0c;获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码 2.解析我们想要的数据 3.按照需求保存 注意&#xff1a;开始爬虫前&#xff0c;需要给其封装 headers {User-…...

5G NR SSB简介

文章目录 SSB介绍SSB波束扫描 SSB介绍 5G NR 引入了SSB 这个概念&#xff0c;同步信号和PBCH块(Synchronization Signal and PBCH block, 简称SSB) 它由主同步信号(Primary Synchronization Signals, 简称PSS)、辅同步信号(Secondary Synchronization Signals, 简称SSS)、PBCH…...

java将mysql表结构写入到word表格中

文章目录 需要的依赖 需要的依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version> </dependency> <!--07版本的&#xff0c;行数不受限制--> <dependency>&l…...

SpringBoot教程(安装篇) | Docker Desktop的安装(Windows下的Docker环境)

SpringBoot教程&#xff08;安装篇&#xff09; | Docker Desktop的安装&#xff08;Windows下的Docker环境&#xff09; 前言如何安装Docker Desktop资源下载安装启动&#xff08;重点&#xff09;1. 检查 bcdedit的hypervisorlaunchtype是否为Auto2. 检查CPU是否开启虚拟化3.…...

day2网络编程项目的框架

基于终端的 UDP云聊天系统 开发环境 Linux 系统GCCUDPmakefilesqlite3 功能描述 通过 UDP 网络使服务器与客户端进行通信吗&#xff0c;从而实现云聊天。 Sqlite数据库 用户在加入聊天室前&#xff0c;需要先进行用户登录或注册操作&#xff0c;并将注册的用户信息&#xf…...

C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 前面说过纹理贴图能够大幅提升游戏画面质量,但纹理贴图是没有叠加的。在一些游戏场景中,要求将非常不同的多个纹理(如泥泞的褐色地面、绿草植密布的地面、碎石遍布的地面)叠加(混合)起来显示,实现纹理间能够…...

探索云计算中的 Serverless 架构:未来的计算范式?

目录 引言 一、Serverless架构概览 二、Serverless 架构的优势 三、Serverless架构的挑战 四、Serverless架构的未来展望 五、结论 引言 在当今快速发展的 IT 行业中&#xff0c;云计算无疑占据了举足轻重的地位。随着技术的不断演进&#xff0c;云计算的一个新兴分支——…...

爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析

作品详情  运用Hadoop和MongoDB对得分能力数据进行分析&#xff1b;  运用python进行机器学习的模型调理&#xff0c;利用Pytorch框架对爬取的评论进行情感分析预测&#xff1b;  利用python和MySQL对网站的数据进行爬取、数据清洗及可视化。...

扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法

随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…...

LeetCode hot100---数组及矩阵专题(C++语言)

1、最大子数组和 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 (2)输入输出描述&#xff1a; 输入&#…...

LabVIEW提高开发效率技巧----快速实现原型和测试

在LabVIEW开发中&#xff0c;DAQ助手&#xff08;DAQ Assistant&#xff09;和Express VI为快速构建原型和测试功能提供了极大的便利&#xff0c;特别适合于简单系统的开发和早期验证阶段。 DAQ助手&#xff1a;是一种可视化配置工具&#xff0c;通过图形界面轻松设置和管理数据…...

大论文记录

基础知识回顾 1.强化学习&#xff08;Agent、Environment) 在 RL 中&#xff0c;代理通过不断与环境交互、以试错的方式进行学习&#xff0c;在不确定性下做出顺序决策&#xff0c;并在探索&#xff08;新领域&#xff09;和开发&#xff08;使用从经验中学到的知识&#xff…...

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo

蘑菇分类检测数据集 21类蘑菇 8800张 带标注 v 蘑菇分类检测数据集 21类蘑菇 8800张 带标注 voc yolo 蘑菇分类检测数据集介绍 数据集名称 蘑菇分类检测数据集 (Mushroom Classification and Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型…...

dockerhub 镜像拉取超时的解决方法

在几个月前&#xff0c;因为一些原因&#xff0c;导致 dockerhub 官网上面的镜像拉取超时&#xff0c;目前可以通过修改仓库地址&#xff0c;通过 daocloud 拉取 public-image-mirror 方式一 源仓库替换仓库cr.l5d.iol5d.m.daocloud.iodocker.elastic.coelastic.m.daocloud.io…...

私家车开车回家过节会发生什么事情

自驾旅行或者是自驾车回家过节路程太远。长途奔袭的私家车损耗很大。新能源汽车开始涉足电力系统和燃电混动的能源供应过渡方式。汽车在路途中出现零件故障。计划的出发日程天气原因。台风是否会提醒和注意。汽车的油站供应链和电力充电桩的漫长充电过程。高速公路的收费站和不…...

正则表达式的使用示例--Everything文件检索批量重命名工具

一、引言 Everything是一款非常实用的文件搜索工具&#xff0c;它可以帮助您快速定位并查找计算机中的文件和文件夹。Everything搜索文件资料之神速&#xff0c;有使用过的朋友们都深有体会&#xff0c;相对于Windows自带的搜索功能&#xff0c;使用Everything&#xff0c;可以…...

centos环境安装JDK详细教程

centos环境安装JDK详细教程 一、前期准备二、JDK安装2.1 rpm方式安装JDK2.2 zip方式安装JDK2.3 yum方式安装JDK 本文主要说明CentOS下JDK的安装过程。JDK的安装有三种方式&#xff0c;用户可根据实际情况选择&#xff1a; 一、前期准备 查看服务器操作系统型号&#xff0c;执…...

Spring Cloud全解析:服务调用之OpenFeign集成OkHttp

文章目录 OpenFeign集成OkHttp添加依赖配置连接池yml配置 OpenFeign集成OkHttp OpenFeign本质是HTTP来进行服务调用的&#xff0c;也就是需要集成一个Http客户端。 使用的是Client接口来进行请求的 public interface Client {// request是封装的请求方式、参数、返回值类型/…...

前端算法合集-1(含面试题)

(这是我面试一家中厂公司的二面算法题) 数组去重并按出现次数排序 题目描述: 给定一个包含重复元素的数组&#xff0c;请你编写一个函数对数组进行去重&#xff0c;并按元素出现的次数从高到低排序。如果次数相同&#xff0c;则按元素值从小到大排序。 let arr [2, 11,10, 1…...

影刀---如何进行自动化操作

本文不是广告&#xff0c;没有人给我宣传费&#xff0c;只是单纯的觉得这个软件很好用 感谢大家的多多支持哦 本文 1.基本概念与操作&#xff08;非标准下拉框和上传下载&#xff09;非标准对话框的操作上传对话框、下载的对话框、提示的对话框 2.综合案例3.找不到元素怎么办&a…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验

2024年初&#xff0c;人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目&#xff08;一款融合大型语言模型能力的云端AI编程IDE&#xff09;时&#xff0c;技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力&#xff0c;TRAE在WayToAGI等…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...