使用python爬取豆瓣音乐Top250并按照歌名、歌手、发行时间、音乐类别、评价人数以及评论 共计6个字段进行存储
时间: 2024-02-01 19:02:22 浏览: 86
好的,可以使用Python中的requests和BeautifulSoup库来实现豆瓣音乐Top250的爬取和数据存储。以下是实现的代码:
```python
import requests
from bs4 import BeautifulSoup
import csv
url = 'https://music.douban.com/top250?start='
# 定义函数获取页面信息
def get_page(url):
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.36'}
response = requests.get(url, headers=headers)
return BeautifulSoup(response.text, 'html.parser')
# 定义函数获取歌曲信息
def get_music_info(page):
tr_list = page.find('div', {'class': 'article'}).find('table').find_all('tr')[1:]
for tr in tr_list:
td_list = tr.find_all('td')
music_name = td_list[0].find('a').text.strip() # 歌曲名
artist = td_list[1].text.strip() # 歌手
time = td_list[2].text.strip() # 发行时间
style = td_list[3].text.strip() # 音乐类别
rate = td_list[4].find('span', {'class': 'rating_num'}).text.strip() # 评价人数
comment = td_list[4].find('span', {'class': 'inq'}).text.strip() # 评论
yield music_name, artist, time, style, rate, comment
# 存储信息到CSV文件
def save_to_csv(file_name, data):
with open(file_name, mode='w', encoding='utf-8', newline='') as f:
csv_writer = csv.writer(f)
# 写入表头
csv_writer.writerow(['歌曲名', '歌手', '发行时间', '音乐类别', '评价人数', '评论'])
for row in data:
csv_writer.writerow(row)
if __name__ == '__main__':
data = []
for i in range(0, 250, 25):
page = get_page(url + str(i))
for music_info in get_music_info(page):
data.append(music_info)
save_to_csv('douban_music_top250.csv', data)
```
以上代码中,首先定义了一个`get_page`函数,用于获取页面信息,并将其解析成`BeautifulSoup`对象。接着,定义了一个`get_music_info`函数,用于获取歌曲的相关信息,并使用`yield`生成器返回一个包含歌曲信息的元组。然后,使用`save_to_csv`函数将歌曲信息存储到CSV文件中。在`main`函数中,循环遍历豆瓣音乐Top250的每一页,分别调用`get_page`和`get_music_info`函数获取歌曲信息,并将其添加到`data`列表中。最后,调用`save_to_csv`函数将歌曲信息保存到CSV文件中。
阅读全文