Python 爬虫之下载歌曲(二)

获取深夜emo云歌单信息


文章目录


前言

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


一、基本流程

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


二、代码编写

1.基本要素代码

代码如下:

python 复制代码
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.获取歌名和链接信息

代码如下:

python 复制代码
# 获取歌名和链接相关信息
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.获取歌曲的作者信息

代码如下:

python 复制代码
# 获取所有的歌曲的作者
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.将上面三个列表遍历保存

代码如下:

python 复制代码
# 将每首歌的以上信息一一对应起来
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')

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


三、效果展示

相关推荐
Lynnxiaowen6 分钟前
今天我们学习python编程常用模块与面向对象
运维·python·学习·云计算
小火柴1237 分钟前
利用R绘制条形图
开发语言·r语言
一头生产的驴18 分钟前
java整合itext pdf实现固定模版pdf导出
java·python·pdf
魔都吴所谓19 分钟前
【python】快速实现pdf批量去除指定位置水印
java·python·pdf
沐知全栈开发28 分钟前
PHP MySQL 插入数据详解
开发语言
YFCodeDream1 小时前
MLLM技术报告 核心创新一览
python·gpt·aigc
自由会客室1 小时前
在 Ubuntu24.04 上安装 JDK 21(Java 21)
java·开发语言
喜欢读源码的小白1 小时前
SpringBoot的启动流程原理——小白的魔法引擎探秘
java·开发语言·spring boot·springboot启动原理
夜幽青玄2 小时前
mybatis-plus调用报 org.springframework.dao.DataIntegrityViolationException 错误处理
开发语言·python·mybatis
洲覆2 小时前
Redis 内存淘汰策略
开发语言·数据库·redis·缓存