python爬虫Selenium模拟浏览器获取爬取QQ音乐某位歌手最受欢迎的前5首歌曲的歌词、流派、歌曲发行时间、评论条数、评论时间、评论点赞次数、评论内容具体(每一首歌的评论>=500条)。
时间: 2023-10-20 15:13:42 浏览: 163
由于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音乐的反爬虫机制较为严格,如果爬取速度过快或者爬取的数据量过大,可能会触发反爬虫机制而导致爬取失败。因此,我们需要注意控制爬取速度和数据量。
阅读全文