爬虫入门——爬取QQ音乐某一歌手前五首歌曲信息及相关评论


前言

python课作业
请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词、流派、歌曲发行时间、评论条数、评论时间、评论点赞次数、评论内容具体(每一首歌的评论>=500条)。

一、查看信息

  1. 查看QQ音乐你喜欢的歌手的网页结构
    在这里插入图片描述

  2. 获取每首歌的url
    经观察可发现所有的歌曲都在 ul class=’songlist__list’ 下,所以我们就可以通过遍历其及其子标签得到前五首歌每首歌的url

  3. 获取歌曲基本信息
    在这里插入图片描述
    在这里插入图片描述

  4. 获取前500条评论
    在这里插入图片描述
    因观察发现热门评论为15条,每点一次“点击加载更多”就会再多加载15条,所以循环(500/15)约等于33次
    热评具体信息:包括热评内容、时间、点赞数

二、代码实现

完整代码如下:

from selenium import webdriver
import csv
from time import sleep
import time

#创建Chrome浏览器对象
driver=webdriver.Chrome()
#打开QQ音乐
driver.get("https://y.qq.com/n/yqq/singer/0022eAG537I1bg.html")
#csv文件配置
csv_file = open(r'C:\Users\玐玐子公主\Desktop\python\实验\Lab2\QQmusic.csv','w',newline='',encoding='utf-8-sig')
writer = csv.writer(csv_file)
#开始时间
start = time.time()

# 取前5首歌曲
song_numer=
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于QQ音乐需要登录才能进行爬取,因此我们需要使用Selenium模拟浏览器操作,先登录QQ音乐,再进行爬取。 首先,我们需要安装Selenium和ChromeDriver。Selenium可以通过pip安装,ChromeDriver需要从官网下载对应版本的驱动。 安装完成后,我们就可以开始编写代码了。下面是完整的代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 设置ChromeDriver路径 path = 'C:/chromedriver.exe' # 创建浏览器对象 browser = webdriver.Chrome(path) # 打开QQ音乐网站 browser.get('https://y.qq.com/') # 点击登录按钮 login_btn = browser.find_element_by_link_text('登录') login_btn.click() # 切换到iframe iframe = browser.find_element_by_id('login_frame') browser.switch_to.frame(iframe) # 点击QQ登录按钮 qq_login_btn = browser.find_element_by_id('switcher_plogin') qq_login_btn.click() # 输入QQ号和密码 qq_input = browser.find_element_by_id('u') qq_input.send_keys('your_qq_number') password_input = browser.find_element_by_id('p') password_input.send_keys('your_password') # 点击登录按钮 submit_btn = browser.find_element_by_id('login_button') submit_btn.click() # 等待登录成功并跳转到个人心页面 time.sleep(10) # 获取歌手页面 singer_url = 'https://y.qq.com/n/yqq/singer/001fNHEf1SFEFN.html' browser.get(singer_url) # 获取歌曲列表 song_list = browser.find_elements_by_css_selector('.songlist__list .js_song') for i in range(5): # 点击歌曲 song_list[i].click() # 切换到歌曲iframe song_iframe = browser.find_element_by_id('frameMusic') browser.switch_to.frame(song_iframe) # 获取歌曲信息 song_name = browser.find_element_by_css_selector('.data__name_txt').text song_genre = browser.find_element_by_css_selector('.data__singer').text.split('/')[1].strip() song_release_time = browser.find_element_by_css_selector('.data__album').text.split('/')[1].strip() # 获取评论 comment_btn = browser.find_element_by_css_selector('.mod_tab__tab .js_tab:nth-child(2)') comment_btn.click() time.sleep(2) comment_list = [] while len(comment_list) < 500: # 获取评论列表 comments = browser.find_elements_by_css_selector('.js_commentlist .js_cmt_li') for comment in comments: comment_time = comment.find_element_by_css_selector('.js_cmt_time').text comment_like = comment.find_element_by_css_selector('.js_cmt_like').text comment_content = comment.find_element_by_css_selector('.js_cmt_content').text comment_list.append((comment_time, comment_like, comment_content)) # 点击下一页 next_btn = browser.find_element_by_css_selector('.js_get_more_hot a') next_btn.click() time.sleep(2) # 输出歌曲信息评论 print('歌曲名称:', song_name) print('流派:', song_genre) print('发行时间:', song_release_time) print('评论数:', len(comment_list)) for comment in comment_list: print('评论时间:', comment[0]) print('点赞次数:', comment[1]) print('评论内容:', comment[2]) print('-------------------------------') # 返回歌手页面 browser.switch_to.default_content() back_btn = browser.find_element_by_css_selector('.top__back') back_btn.click() time.sleep(2) # 关闭浏览器 browser.quit() ``` 首先,我们打开QQ音乐网站并点击登录按钮。由于登录弹窗是一个iframe,因此需要先切换到iframe,再进行登录操作。 登录成功后,我们跳转到某位歌手的页面,并获取歌曲列表。我们只需要获取前5首歌曲信息评论。 对于每首歌曲,我们先点击进入歌曲页面,再切换到歌曲iframe。我们可以通过CSS选择器获取歌曲的名称、流派和发行时间。然后我们需要获取歌曲的评论,由于一页只能显示20条评论,因此需要不断点击下一页,直到获取到500条评论为止。对于每条评论,我们可以通过CSS选择器获取评论的时间、点赞次数和内容,将其存储在一个列表。 最后,我们输出歌曲信息评论,然后返回歌手页面,进行下一首歌曲爬取。 注意:由于QQ音乐的反爬虫机制较为严格,如果爬取速度过快或者爬取的数据量过大,可能会触发反爬虫机制而导致爬取失败。因此,我们需要注意控制爬取速度和数据量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值