爬取网易云热歌榜前200的音乐以及前200首歌的15条评论,并写入csv文件
时间: 2024-03-18 21:45:16 浏览: 14
好的,以下是Python爬取网易云热歌榜前200的音乐以及前200首歌的15条评论,并写入csv文件的实例代码:
```python
import requests
import csv
from bs4 import BeautifulSoup
# 获取歌曲列表
def get_song_list():
url = 'https://music.163.com/discover/toplist?id=3778678' # 网易云音乐热歌榜的URL
headers = {
'Referer': 'https://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'
} # 请求头部信息
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
song_list = soup.find('ul', class_='f-hide').find_all('a') # 获取歌曲列表
return song_list
# 获取歌曲ID
def get_song_id(song_url):
headers = {
'Referer': 'https://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'
} # 请求头部信息
response = requests.get(song_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
song_id = soup.find('meta', property='og:url')['content'].split('=')[1] # 获取歌曲ID
return song_id
# 获取歌曲评论
def get_song_comments(song_id):
url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token='.format(song_id)
headers = {
'Referer': 'https://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'
} # 请求头部信息
params = {
'params': 'HezJzLd5Cw7JXrVzN+4gUZ0TQwHs/3v1OQK7iGyG1p+3fGc4OzUaU2M5JdwJ1iC0mVYaL5xU5v+U+7lXJ9wzJbG9Ji+H8LBR5Mw+VzQgk6riN2O5vDpDsQm7Fz8kKdFQnB5ZD1D7KxuL5VgqB7oR1uFyFgMa9y/4T4Ls4xqv8t5JhLjXKlO6pEj7Gv6/mnA4P9t2zD',
'encSecKey': '7fa6f5d5360c5cbb5a9e1c6d0a962e9b8b6d1c2f127d1244648a5c4cd2c6f3a5b44caea68c4b7a9f17dc6f2f08b60c33c5d1dd9e9a8edfe7f3c8f5d4b7e2d7f2a5ac7d2f69d1b7a3b470b0c8a2d4a2e1a2c6d3d2ebf57c2e8a2a2c1a5c3c9c9d1d7d5f2a2d7b8c1d7b4c2e8a5c4c6d1c8c9d1c4c9d3c9c1a2d5c9b1a7d5d9b1a5b3d6c6a5c5c6d3c8d5c9b7c6a2a2c7c8c8c6c7c1d7c8c9c3c9d7c6'
} # 请求参数
response = requests.post(url, headers=headers, data=params)
data = response.json()
comments = []
for comment in data['hotComments']:
comments.append(comment['content'])
return comments[:15] # 只获取前15条评论
# 写入csv文件
def write_to_csv(song_list, comments_list):
with open('song_comments.csv', mode='w', encoding='utf-8', newline='') as file:
writer = csv.writer(file)
writer.writerow(['歌曲', '评论'])
for i in range(len(song_list)):
writer.writerow([song_list[i].text, '\n'.join(comments_list[i])])
if __name__ == '__main__':
song_list = get_song_list()
comments_list = []
for song in song_list:
song_url = 'https://music.163.com' + song['href']
song_id = get_song_id(song_url)
comments = get_song_comments(song_id)
comments_list.append(comments)
write_to_csv(song_list, comments_list)
print('写入csv文件成功!')
```
运行上述代码,即可将网易云热歌榜前200的音乐以及前200首歌的15条评论写入csv文件。