爬虫抓取网易云音乐歌曲评论
时间: 2025-06-23 18:04:10 浏览: 12
### 使用Python编写爬虫抓取网易云音乐歌曲评论
为了实现这一目标,通常会采用如下方式:
#### 数据采集方法
通过浏览器访问网易云音乐的网页版,并定位到具体的歌曲评论页面。在此过程中,需注意观察网页加载过程中的网络请求,特别是那些返回JSON格式的数据接口,因为大多数情况下,动态加载的内容(如分页后的更多评论)都是由AJAX请求获得的[^1]。
对于静态HTML内容,则可以查找包含评论信息的具体标签属性和结构模式。一旦确定了数据源的位置,就可以着手准备相应的解析逻辑。
#### 实现所需库
- `requests` 或者更高级别的异步HTTP客户端比如 `httpx` 来发起网络请求;
- `BeautifulSoup` 用于解析HTML文档;
- 如果涉及JavaScript渲染的内容,可能还需要借助像Selenium这样的工具模拟真实用户的浏览行为;但是针对API接口直接调用的情况则不需要额外安装此类依赖项。
考虑到反爬机制的存在,在发送请求时应适当设置headers模仿正常浏览器的行为,并遵循网站robots.txt文件的规定合理控制频率以免给服务器造成过大压力。
#### 示例代码
下面给出一段简单的Python脚本作为示范用途,请读者自行调整参数适应实际需求:
```python
import requests
from bs4 import BeautifulSoup
def fetch_comments(song_id, page=1):
url = f"https://music.163.com/api/v1/resource/comments/R_SO_4_{song_id}?limit=20&offset={(page - 1)*20}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Referer': 'https://music.163.com/'
}
response = requests.get(url=url, headers=headers).json()
comments_list = []
if not isinstance(response['comments'], list): return []
for item in response["comments"]:
comment_info = {}
comment_info["content"] = item["content"]
comment_info["time"] = item["time"]
comment_info["likedCount"] = item["likedCount"]
comments_list.append(comment_info)
return comments_list
if __name__ == "__main__":
song_id = input("请输入要查询评论的歌曲ID:")
try:
result = fetch_comments(int(song_id))
print(f"共获取{len(result)}条评论")
for idx, each_comment in enumerate(result[:min(5,len(result))], start=1):
print(f"{idx}. {each_comment}")
except Exception as e:
print(str(e))
```
此段程序定义了一个名为`fetch_comments()` 的函数接收两个参数:一个是必选的目标曲目编号(`song_id`) ,另一个是可选项用来指定想要获取哪一页的结果,默认值设为第一页。该函数内部构建好URL模板之后便向其发出GET请求并尝试将其响应体转换成字典形式以便后续操作。最后遍历所得到的对象列表抽取感兴趣字段存入新的容器内供外部调用显示出来。
需要注意的是上述链接地址以及其中携带的部分参数可能会随着官方更新而发生变化因此建议定期验证有效性必要时候做出相应修改以保持兼容性。
阅读全文
相关推荐


















