Python 爬虫之下载歌曲(二)

2023-12-27 05:58:43

获取深夜emo云歌单信息



前言

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


一、基本流程

打开网抑云平台的歌单,复制这个歌单的网页地址。输入到我下面写的程序里,然后执行程序,就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')

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


三、效果展示

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_57061292/article/details/135233325
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。