python爬取网易云音乐_Python项目实战:爬取网易云音乐评论的昵称,评论的时间,评论点赞量,评论,并保存在本地的表格里
时间: 2024-04-29 22:13:00 浏览: 293
好的,我可以帮您实现这个爬虫项目。首先,我们需要用到requests库和BeautifulSoup库来获取网页内容和解析网页。
首先,我们需要找到网易云音乐评论的接口,这个接口可以通过抓包工具获取。我们可以使用Chrome浏览器的开发者工具来获取接口链接。打开网易云音乐的歌曲页面,找到评论区,点击“查看更多评论”,然后按下F12键,打开开发者工具,在Network选项卡下可以看到所有的网络请求。找到名为“comments”的请求,这就是我们需要的评论接口。
接下来,我们可以使用Python代码发送请求,并解析返回的JSON数据来获得评论信息。以下是完整代码实现:
```
import requests
import json
import time
import csv
headers = {
'Referer': 'http://music.163.com/',
'Host': 'music.163.com',
'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'
}
def get_comments(url):
# 获取歌曲ID
song_id = url.split('=')[1]
# 定义评论列表
comments_list = []
# 定义偏移量和总评论数
offset = 0
total = 99999999
# 定义CSV文件名和表头
csv_name = '{}.csv'.format(song_id)
headers = ['nickname', 'time', 'likedCount', 'comment']
# 循环获取评论
while offset < total:
# 构造请求参数
params = {
'csrf_token': '',
'offset': offset,
'limit': '100',
'oid': song_id,
'type': '0'
}
# 发送请求
response = requests.post('http://music.163.com/api/v1/resource/comments/R_SO_4_{}?csrf_token='.format(song_id), headers=headers, params=params)
# 解析JSON数据
data = json.loads(response.text)
# 更新偏移量和总评论数
offset += len(data['comments'])
total = data['total']
# 遍历评论列表,提取相关信息
for comment in data['comments']:
nickname = comment['user']['nickname']
time = comment['time']
likedCount = comment['likedCount']
content = comment['content']
# 将评论信息添加到列表中
comments_list.append([nickname, time, likedCount, content])
# 暂停1秒,防止过于频繁的请求
time.sleep(1)
# 将评论信息保存到CSV文件中
with open(csv_name, 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(comments_list)
print('Done!')
if __name__ == '__main__':
url = input('请输入网易云音乐歌曲链接:')
get_comments(url)
```
代码中的headers是请求头,其中Referer和Host是必须的。get_comments函数用于获取评论信息并保存到CSV文件中。首先,我们需要从URL中获取歌曲ID,然后定义评论列表、偏移量和总评论数、CSV文件名和表头。接下来,在循环中构造请求参数,并发送请求。解析JSON数据,将评论信息添加到列表中。最后,将评论信息保存到CSV文件中。
注意:由于网易云音乐的反爬虫机制比较严格,过于频繁的请求可能会导致IP被封禁,因此需要适当地设置请求间隔时间。另外,由于CSV文件中可能包含特殊字符,因此需要使用utf-8编码来保存文件。
希望这个代码可以帮助到您!
阅读全文
相关推荐













