【爬虫】使用selenium爬取网易云音乐热评

网易云音乐热歌榜单热评

使用selenium爬取网易云音乐热歌榜的基础上深度爬取网易云音乐热歌榜热评
在这里插入图片描述

在爬取到热歌榜单的歌曲url后深度爬取歌曲所有的评论数据,通过F12可以发现所有的评论数据在同一个div标签内,而对于热评来说只需要爬取前十五条数据即可,同时要注意页面中嵌套了frame在爬取时需要使用switch_to.frame()方法来切换页面frame以防定位不到元素。

tps://img-blog.csdnimg.cn/direct/f4d5facfc5bc4de78bfe6adbff878fee.png)

完整代码

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

# Edge驱动
driver = webdriver.Edge()

# 访问网易云音乐热歌榜
print("访问网易云音乐中..")
driver.get("https://music.163.com/#/discover/toplist?id=3778678")
driver.implicitly_wait(10)  # 隐性等待

# 切换到 iframe 中
driver.switch_to.frame('g_iframe')

# 解析网页源代码获取所有 tr 标签
print("解析网页中..")
tr_list = driver.find_elements(By.XPATH, "//table[@class='m-table m-table-rank']/tbody/tr")

# 遍历 tr 标签获取每个歌曲的url
print("获取榜单所有歌曲url中..")
url_list = [tr.find_element(By.XPATH, "td[2]/div/div/div/span/a").get_attribute("href") for tr in tr_list]

print("开始爬取..")
fp = open("music_hot_comment.txt", "a", encoding="utf-8")
# 遍历 url_list 请求每个url
for url in url_list:
    driver.get(url)
    # 这里也需要切换到 iframe 中
    driver.switch_to.frame('g_iframe')
    # 获取歌曲名
    music_title = driver.find_element(By.CLASS_NAME, "tit").text
    # print(f"《{music_title}》")
    music_title_ = (f"《{music_title}》\n")
    # 写入歌名
    fp.write(music_title_)

    # 获取所有评论
    music_comment = driver.find_elements(By.XPATH, "//div[@class='cmmts j-flag']")

    # 取出每条评论
    for comment in music_comment:
        # 只要热评 前15条评论为热评
        for i in range(1, 16):
            hot_comment = comment.find_element(By.XPATH, f"div[{i}]/div[2]/div/div").text
            # print(f"{hot_comment}")
            fp.write(f"{hot_comment}\n")

    fp.write("\n")

print("爬取完毕")


运行结果

在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值