Python 爬虫之下载歌曲(二)

news2024/11/19 23:22:19

获取深夜emo云歌单信息


文章目录

  • 获取深夜emo云歌单信息
  • 前言
  • 一、基本流程
  • 二、代码编写
    • 1.基本要素代码
    • 2.获取歌名和链接信息
    • 3.获取歌曲的作者信息
    • 4.将上面三个列表遍历保存
  • 三、效果展示


前言

换个平台,爬歌深夜网抑云平台的歌单的相关信息,关于作者、歌名、链接等信息。


一、基本流程

打开网抑云平台的歌单,复制这个歌单的网页地址。输入到我下面写的程序里,然后执行程序,就OK了。如下图所示:

在这里插入图片描述


二、代码编写

1.基本要素代码

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 播放歌单的网页地址  比如:https://music.163.com/#/playlist?id=26467411
video_url = ''
# 创建一个对象实例,用来表示用哪个浏览器爬取
driver = webdriver.Firefox()
# 某个歌单的地址
driver.get(video_url)
# 等待一下,等打开网页
time.sleep(5)

music_url_list = []
music_title_list = []
music_artist_list = []

# 先加载框架,否则下面的代码无法获取内容
driver.switch_to.frame(driver.find_element(by=By.ID, value='g_iframe'))

以上代码,基本上都是爬虫的基本套路,可以看看我之前写的爬虫教程就明白了。

主要是最后一行代码需要解释一下,以前没有遇到过:
这段代码的作用是在 Selenium 中切换到一个特定的 HTML iframe(内联框架)元素中。以下是对这段代码的详细解释:

driver.switch_to.frame(): 这是 Selenium 提供的一个方法,用于切换当前操作的上下文到指定的 iframe 元素中。在网页中,iframe 是一种常用的嵌入其他网页内容的技术,它可以在一个网页内部显示另一个网页的内容。

driver.find_element(by=By.ID, value='g_iframe'): 这段代码使用 find_element() 方法来查找具有给定 ID 的 HTML 元素。在这个例子中,我们通过 By.ID 参数指定查找方式为 ID,然后通过 value='g_iframe' 指定了要查找的元素 ID 为 "g_iframe"。

整个语句 driver.switch_to.frame(driver.find_element(by=By.ID, value='g_iframe')) 的作用是:首先找到 ID 为 "g_iframe" 的 iframe 元素,然后将 Selenium 的操作上下文切换到这个 iframe 中。这样,后续的 Selenium 操作(如查找元素、点击按钮等)就会在这个 iframe 范围内进行,而不是在主页面上。

之所以需要这样做,是因为在某些情况下,网页中的某些元素(如按钮、链接等)可能存在于 iframe 中,而不在主页面上。如果不先切换到对应的 iframe,Selenium 将无法找到或操作这些元素。因此,这段代码是确保后续操作能够正确执行的重要步骤。


2.获取歌名和链接信息

代码如下:

# 获取歌名和链接相关信息
music_list = driver.find_elements(by=By.CSS_SELECTOR, value='.txt a')
# 遍历获取到的所有信息
for music in music_list:

    # 获取其中的歌名和链接
    music_url = music.get_attribute('href')
    music_title = music.find_element(by=By.TAG_NAME, value='b').get_attribute('title')

    # 将歌曲名字列表中的\xa0 换成空格
    for i in range(len(music_title_list)):
        music_title_list[i] = music_title_list[i].replace('\xa0', ' ')
    # 将信息添加到列表中
    music_url_list.append(music_url)
    music_title_list.append(music_title)
  1. 东西很杂,先把相关的信息都获取到,合成一个列表。
  2. 遍历这些信息,从中筛选出歌名和链接。
  3. 上面获取的信息中的空格会变成 \xa0,所以需要把它转换回来。
  4. 然后将筛选出的信息各自添加到列表中去。

3.获取歌曲的作者信息

代码如下:

# 获取所有的歌曲的作者
music_artists = driver.find_elements(by=By.CSS_SELECTOR, value='.text')

# 遍历获取到的所有信息
for music_artist in music_artists:

    # 获取其中作者的名字
    music_artis = music_artist.get_attribute('title')
    if music_artis:

        # 将作者的名字添加到列表中
        music_artist_list.append(music_artis)

基本上就是重复上一节的步骤。


4.将上面三个列表遍历保存

代码如下:

# 将每首歌的以上信息一一对应起来
i = 0
while i < len(music_url_list):
    song_info = f'歌曲名称:{music_title_list[i]}   歌曲作者:{music_artist_list[i]}   歌曲链接:{music_url_list[i]}'
    print(song_info)
    i += 1
    with open('music.txt', 'a', encoding='utf-8') as f:
        f.write(song_info + '\n')

一个简单的一边遍历一边保存的操作。


三、效果展示

在这里插入图片描述

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

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

相关文章

Advanced IP Scanner - 网络扫描器

Advanced IP Scanner - 网络扫描器 1. Advanced IP ScannerReferences https://www.advanced-ip-scanner.com/cn/ ​ 可靠且免费的网络扫描器可以分析 LAN。该程序可扫描所有网络设备&#xff0c;使您能够访问共享文件夹和 FTP 服务器&#xff0c;(通过 RDP 和 Radmin) 远程控制…

[Angular] 笔记 9:list/detail 页面以及@Output

1. Output input 好比重力&#xff0c;向下传递数据&#xff0c;list 传给 detail&#xff0c;smart 组件传给 dumb 组件&#xff0c;父组件传给子组件。input 顾名思义&#xff0c;输入数据给组件。 output 与之相反&#xff0c;好比火箭&#xff0c;向上传递数据或事件。ou…

安装kafka

静态文件安装&#xff08;单机&#xff09; 解压到指定目录&#xff08;解压到 /usr&#xff09; tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ 到指定的解压目录下 cd /usr/kafka_2.11-2.2.0/ 配置主机名 查看是否配置了HOSTNAME vim /etc/sysconfig/network 没有就新增 HOSTNA…

当 Redis 遇上 Serverless

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点&#xff0c;和项目&#xff0c;并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏…

【番外】在Windows安装Airsim/UE4踩坑合集

在Windows安装Airsim/UE4踩坑合集 1.安装过程中一定要确保Epic Games Launcher是英文环境&#xff0c;保存路径什么的也尽量是英文。2.UE4中的虚幻引擎一定要安装4.27版本以上的&#xff0c;不然的话最后运行vs的时候会报语法错误&#xff0c;网上根本查不到的那种错误。换了版…

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd) 5.master2节点迁移容器运行时(docker → containerd) 6.node1节点容器运行时迁移(docker → containerd) 7.升级集群计划&#xff08;v1.23.14 → v1.24.1&#…

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时&#xff0c;故障了一整天&#xff0c;可能这个服务使用的人比较少&#xff0c;没有什么消息爆出来&#xff0c;特此记录下这几天的阿里云处理过程&#xff0c;不免让人怀疑阿里云整体都外包出去了&#xff0c;反应迟钝&#xff0c;水平业余&a…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第三周测验

课程4_第3周_测验题 目录 第一题 1.现在你要构建一个能够识别三个对象并定位位置的算法&#xff0c;这些对象分别是&#xff1a;行人&#xff08;c1&#xff09;&#xff0c;汽车&#xff08;c2&#xff09;&#xff0c;摩托车&#xff08;c3&#xff09;。下图中的标签哪个…

Chrome插件精选 — 前端工具

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. FeHelper(前端助…

ARCGIS PRO SDK 要素空间关系

一、要素与要素查询&#xff0c;返回的是bool值 1、 Touches 判断几何要素是否接触 Touches 如果 geometry1 与 geometry2 接触&#xff0c;则返回 true&#xff0c;否则 false。 touches GeometryEngine.Instance.Touches(Geometry1, Geometry2) 2、…

KEPServerEX 6 之【外篇-1】PTC-ThingWorx服务端软件安装 Tomcat10本地安装

本文目标: 安装 Java 和 Apache Tomcat ,为ThingWorx安装做基础。 ----------------------------------------------------------------------- 安装重点 --------------------------------------------------------------------- 1. 安装 Java 11 / JDK 11 添加系…

LabVIEW进行激光斑点图像处理与分析

LabVIEW进行激光斑点图像处理与分析 近年来&#xff0c;激光技术的应用日益繁荣。激光光斑的质量评估和分析技术决定了应用效果&#xff0c;对机器视觉、武器装备、光学测量和医疗设备产生深远影响。就具体用途和技术而言&#xff0c;激光光斑的采集和处理至关重要。即插即用的…

【三维目标检测】【自动驾驶】IA-BEV:基于结构先验和自增强学习的实例感知三维目标检测(AAAI 2024)

系列文章目录 论文&#xff1a;Instance-aware Multi-Camera 3D Object Detection with Structural Priors Mining and Self-Boosting Learning 地址&#xff1a;https://arxiv.org/pdf/2312.08004.pdf 来源&#xff1a;复旦大学 英特尔Shanghai Key Lab /美团 文章目录 系列文…

Linux:查询当前进程或线程的资源使用情况

目录 一、/proc/[PID]/下的各个文件1、proc简介2、/proc/[PID]/详解 二、通过Linux API获取当前进程或线程的资源使用情况1、getrusage2、sysinfo3、times 在工作中&#xff0c;我们排除app出现的一些性能/资源问题时&#xff0c;通常要先知道当前app的资源使用情况&#xff0c…

一种改进的平衡生成对抗网络用于视网膜血管分割

A Refined Equilibrium Generative Adversarial Network for Retinal Vessel Segmentation 一种改进的平衡生成对抗网络用于视网膜血管分割背景贡献实验方法Symmetric equilibrium architecture&#xff08;对称均衡架构&#xff09;Multi-scale features refine block&#xf…

40G多模光模块QSFP-40G-SR4优势及应用领域介绍

QSFP-40G-SR4光模块是一种常用的光纤传输解决方案。传输速率40G&#xff0c;SR代表短距离多模光纤&#xff08;Short Range Multimode Fiber&#xff09;&#xff0c;4表示有四个光纤通道。这种光模块采用MPO/MTP多模光纤连接器来实现高速传输&#xff0c;传输距离可以达到300米…

如何将语音版大模型AI接入自己的项目里(语音ChatGPT)

如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…

WPF 消息日志打印帮助类:HandyControl+NLog+彩色控制台打印

文章目录 前言相关文章Nlog配置HandyControl配置简单使用显示效果文本内容 前言 我将简单的HandyControl的消息打印系统和Nlog搭配使用&#xff0c;简化我们的代码书写 相关文章 .NET 控制台NLog 使用 WPF-UI HandyControl 控件简单实战 C#更改控制台文字输出颜色 Nlog配置 …

Python中的用户交互函数详解,提升用户体验!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python中的用户交互函数详解&#xff0c;提升用户体验&#xff01;全文4200字&#xff0c;阅读大约12分钟 用户进行交互的Python应用程序&#xff0c;有许多常用的用户交互函…

linux开放tomcat 8080端口

1、查看8080是否开放 firewall-cmd --query-port8080/tcp查看已开启的端口 firewall-cmd --list-ports开启防火墙 systemctl start firewalld2、永久开放8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent3、重加载&#xff08;重启防火墙&#xff09; …