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')

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


三、效果展示

相关推荐
雪碧聊技术3 分钟前
爬豆瓣喜剧电影排行榜数据
爬虫·xhr请求
猫头虎6 分钟前
永久免费白嫖多个域名,一键托管Cloudflare,免费申请SSL加密证书,轻松建站、搭建线路伪装
服务器·开发语言·网络·数据库·python·网络协议·ssl
沙虫一号7 分钟前
线上python问题排查思路
后端·python
无敌最俊朗@1 小时前
C++后端总览
开发语言
多喝开水少熬夜1 小时前
堆相关算法题基础-java实现
java·开发语言·算法
7澄11 小时前
Java 集合框架:List 体系与实现类深度解析
java·开发语言·vector·intellij-idea·集合·arraylist·linkedlist
B站_计算机毕业设计之家1 小时前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
mit6.8241 小时前
一些C++的学习资料备忘
开发语言·c++
Adellle2 小时前
Java中同步和异步的区别,以及阻塞和非阻塞的区别
java·开发语言