以下是Python爬取网易云音乐热门评论的完整攻略:
1. 确认目标页面
首先需要打开网易云音乐的热门评论页面,例如:https://music.163.com/#/song?id=290192&market=baiduqk
2. 获取评论API地址
在浏览器的开发者工具中,切换到Network
标签页,并刷新页面。此时可以在页面响应数据中找到/api/v1/resource/comments/R_SO_4_290192
这样的API地址。
3. 发送请求获取数据
使用Python的requests
模块,向上一步获取到的API地址发送GET请求,并设置相关参数(如请求头或代理等)。将响应的JSON数据解析成Python对象,即可获取到评论数据。示例代码如下:
import requests
url = 'http://music.163.com/api/v1/resource/comments/R_SO_4_290192'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
proxies = {'http': 'http://127.0.0.1:1080', 'https': 'http://127.0.0.1:1080'}
res = requests.get(url, headers=headers, proxies=proxies)
comments = res.json()['hotComments']
4. 分析数据结构
由于响应数据是JSON格式,可以使用json
模块将其解析成Python对象。分析数据结构,找出自己需要的信息,例如:评论的用户昵称和评论内容。示例代码如下:
for comment in comments:
nickname = comment['user']['nickname']
content = comment['content']
print(f'{nickname}: {content}')
此时输出的内容为热门评论中所有用户的昵称和评论内容。
5. 存储数据(可选)
如果需要将爬取到的数据进行存储或分析,可以使用相关的Python库进行处理。例如,可以使用pandas
库将数据转换为DataFrame格式,方便后续操作。
import pandas as pd
data = [{'nickname': comment['user']['nickname'], 'content': comment['content']} for comment in comments]
df = pd.DataFrame(data)
df.to_csv('comments.csv', index=False, header=True)
此时将所有热门评论的用户昵称和评论内容保存到comments.csv
文件中。
示例说明
示例1:获取指定歌曲的所有热门评论
import requests
def get_hot_comments(song_id):
url = f'http://music.163.com/api/v1/resource/comments/R_SO_4_{song_id}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
return res.json()['hotComments']
if __name__ == '__main__':
comments = get_hot_comments(290192)
for comment in comments:
nickname = comment['user']['nickname']
content = comment['content']
print(f'{nickname}: {content}')
这段代码将获取歌曲ID为290192的所有热门评论。
示例2:获取指定歌手所有歌曲的热门评论
import requests
# 获取指定歌手的所有歌曲信息
def get_artist_songs(artist_id):
url = f'http://music.163.com/api/v1/artist/{artist_id}?ext=true'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
songs = res.json()['hotSongs']
return [(song['id'], song['name']) for song in songs]
if __name__ == '__main__':
artist_id = 6452 # 周杰伦的artist_id
songs = get_artist_songs(artist_id)
for song_id, song_name in songs:
comments = get_hot_comments(song_id)
print(f'歌曲[{song_name}]的热门评论:')
for comment in comments:
nickname = comment['user']['nickname']
content = comment['content']
print(f'{nickname}: {content}')
print('\n')
这段代码将获取周杰伦所有歌曲的热门评论。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取网易云音乐热门评论 - Python技术站