Python爬取豆瓣音乐TOP250歌名、歌手、发行时间、音乐类别、评价人数以及一条评论,代码怎么写?
时间: 2023-10-20 08:58:46 浏览: 158
好的,以下是Python爬取豆瓣音乐TOP250歌名、歌手、发行时间、音乐类别、评价人数以及一条评论的代码:
```python
import requests
from bs4 import BeautifulSoup
url = 'https://music.douban.com/top250'
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'}
def get_music_info(url):
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
music_list = soup.find('div', class_='article').find_all('tr', class_=lambda x:x and x.startswith('item'))
for music in music_list:
music_name = music.find('div', class_='pl2').find('a').get_text().strip()
music_info = music.find('div', class_='pl2').find('p').get_text().strip().split('/')
music_artist = music_info[0].strip()
music_album = music_info[1].strip()
music_year = music_info[2].strip() if len(music_info) == 4 else ''
music_genre = music_info[3].strip() if len(music_info) == 4 else music_info[2].strip()
music_rating = music.find('span', class_='rating_nums').get_text().strip()
music_votes = music.find('span', class_='pl').get_text().strip()
music_comment = music.find('span', class_='inq').get_text().strip() if music.find('span', class_='inq') else ''
print("歌曲名:{}\n歌手:{}\n发行时间:{}\n音乐类别:{}\n评价人数:{}\n评论:{}\n".format(music_name, music_artist, music_year, music_genre, music_votes, music_comment))
for i in range(0, 250, 25):
get_music_info(url + '?start=' + str(i))
```
这个程序与前面的程序类似,不同之处在于`get_music_info`函数的实现。在这个函数中,我们首先获取歌曲的基本信息,包括歌名、歌手、专辑名和发行时间。然后,我们根据信息的长度来判断是否有音乐类别,如果有,则获取音乐类别,否则将发行时间作为音乐类别。接着,我们获取评价人数和一条评论。如果不存在评论,则将评论留空。
希望这个程序对你有所帮助!
阅读全文