python 如何爬取qq音乐
时间: 2025-01-18 19:35:26 浏览: 90
### 使用Python爬虫抓取QQ音乐数据的方法
#### 一、准备工作
为了成功地使用Python进行QQ音乐的数据抓取,需先安装必要的库。通常涉及`requests`用于发送HTTP请求,`BeautifulSoup`或`lxml`解析HTML文档,以及`selenium`模拟浏览器行为以便应对JavaScript加载的内容。
对于环境配置方面,在Windows操作系统上利用PyCharm作为IDE,并确保已安装Python解释器版本不低于3.7[^5]。
```bash
pip install requests beautifulsoup4 lxml selenium
```
#### 二、简单示例:获取歌曲列表
下面是一个简单的例子来展示如何从QQ音乐网站获取特定榜单上的歌曲信息:
```python
import json
import requests
def get_song_list(top_id):
url = f"https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?topid={top_id}&format=jsonp"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Referer': 'https://y.qq.com/n/yqq/toplist/'
}
response = requests.get(url, headers=headers)
data = json.loads(response.text.strip('callback()'))
song_info = []
for item in data['songlist']:
name = item['data']['songname']
singer = '/'.join([singer['name'] for singer in item['data']['singer']])
album_name = item['data']['albumname']
song_info.append({
"title": name,
"artist": singer,
"album": album_name
})
return song_info
if __name__ == "__main__":
top_id = input("请输入要查询的排行榜ID:")
songs = get_song_list(top_id)
print(json.dumps(songs, ensure_ascii=False))
```
这段代码展示了如何向QQ音乐API发出GET请求以获得指定排行版中的歌曲详情,并将其转换成易于阅读的形式打印出来[^1]。
#### 三、复杂场景:提取歌词与评论
当目标页面由大量JavaScript动态渲染而成时,则可能需要用到像Selenium这样的自动化测试框架来进行交互操作。例如,如果想要收集某首歌下的全部用户评价,就需要打开该曲目的播放页,滚动到底部触发更多评论加载等功能[^4]。
```python
from selenium import webdriver
from time import sleep
driver_path = r'path_to_your_chromedriver.exe'
browser = webdriver.Chrome(executable_path=driver_path)
try:
browser.get(f'https://y.qq.com/n/ryqq/songDetail/{song_mid}')
while True:
try:
load_more_button = browser.find_element_by_class_name('js_getmore')
load_more_button.click()
sleep(2) # Wait for new comments to be loaded.
except Exception as e:
break
comment_elements = browser.find_elements_by_css_selector('.comment-content p')
all_comments = [element.text for element in comment_elements]
finally:
browser.quit()
print(all_comments[:10]) # Print first ten comments only.
```
此部分脚本说明了怎样借助Selenium驱动Chrome浏览器访问具体歌曲链接地址,持续点击“查看更多”按钮直到无法继续为止,最后读取出所有的短评文字内容[^3]。
阅读全文
相关推荐















