import requests from bs4 import BeautifulSoup import re import pandas as pd url = 'https://music.163.com/discover/toplist?id=19723756' 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' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') song_list = soup.find('ul', {'class': 'f-hide'}) song_items = song_list.find_all('li') data = [] for song_item in song_items: song_title = song_item.find('a') if song_title: song_title = song_title.text.strip() else: song_title = '' song_id = song_item.find('a') if song_id: song_id = song_id['href'].split('=')[1] else: song_id = '' song_url = f'https://music.163.com/song/media/outer/url?id={song_id}.mp3' song_artists = song_item.find('span', {'class': 's-fc3'}) if song_artists: song_artists = song_artists.text.strip() song_artists = re.sub('\s+', ' ', song_artists) song_artists = re.sub('/', ', ', song_artists) else: song_artists = '' data.append([song_title, song_url, song_artists]) df = pd.DataFrame(data, columns=['Title', 'URL', 'Artists']) df.to_excel('song_list.xlsx', index=False)
时间: 2024-03-29 19:35:54 浏览: 77
好的,根据您提供的代码,可以按照以下方式进行修改:
1. 首先,在获取歌曲信息时,需要找到包含歌曲时长和歌手名称的元素。
2. 在获取歌曲时长和歌手名称时,需要分别从该元素中提取出对应的信息。
以下是修改后的代码:
```
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
url = 'https://music.163.com/discover/toplist?id=19723756'
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'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
song_list = soup.find('ul', {'class': 'f-hide'})
song_items = song_list.find_all('li')
data = []
for song_item in song_items:
song_title = song_item.find('a')
if song_title:
song_title = song_title.text.strip()
else:
song_title = ''
song_id = song_item.find('a')
if song_id:
song_id = song_id['href'].split('=')[1]
else:
song_id = ''
song_url = f'https://music.163.com/song/media/outer/url?id={song_id}.mp3'
song_info = song_item.find('span', {'class': 'song-list-item-info'})
if song_info:
song_info = song_info.text.strip().split('-')
song_artists = song_info[0].strip()
song_duration = song_info[1].strip()
else:
song_artists = ''
song_duration = ''
data.append([song_title, song_url, song_artists, song_duration])
df = pd.DataFrame(data, columns=['Title', 'URL', 'Artists', 'Duration'])
df.to_excel('song_list.xlsx', index=False)
```
在修改后的代码中,我添加了以下内容:
1. 在获取歌曲信息时,使用 `song_item.find('span', {'class': 'song-list-item-info'})` 获取包含歌曲时长和歌手名称信息的元素。
2. 在获取歌手名称和歌曲时长时,使用 `song_info = song_info.text.strip().split('-')` 将元素的文本内容以 `-` 分隔,得到包含歌手名称和歌曲时长的列表。
3. 根据列表中的元素顺序,使用 `song_artists = song_info[0].strip()` 和 `song_duration = song_info[1].strip()` 分别获取歌手名称和歌曲时长。
4. 在 `data.append()` 中添加了 `song_duration`,它会作为歌曲信息的第四个元素保存到 `data` 列表中。
5. 修改了 `df = pd.DataFrame(data, columns=['Title', 'URL', 'Artists'])` 为 `df = pd.DataFrame(data, columns=['Title', 'URL', 'Artists', 'Duration'])`,将 `Duration` 列添加到了 DataFrame 中。
希望这个修改后的代码可以帮助到您!
阅读全文