import requests
from bs4 import BeautifulSoup
import csv
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
playlist_url = "https://music.163.com/playlist?id=714343781"
output_file = "playlist.csv"
def get_playlist_info(url):
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('em', class_='f-ff2').text.strip()
songs = []
items = soup.find_all('li', class_='j-flag')
for item in items:
song_id = item.get('data-res-id')
song_name = item.find('b').get('title')
artist = item.find('div', class_='text').find('a').text.strip()
songs.append({
'song_id': song_id,
'song_name': song_name,
'artist': artist
})
return title, songs
except Exception as e:
print(f"Error: {e}")
return None, None
def save_to_csv(data, filename):
with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:
fieldnames = ['song_id', 'song_name', 'artist']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for row in data:
writer.writerow(row)
if __name__ == "__main__":
print("开始爬取歌单信息...")
start_time = time.time()
title, songs = get_playlist_info(playlist_url)
if title and songs:
print(f"歌单名称: {title}")
print(f"歌曲数量: {len(songs)}")
save_to_csv(songs, output_file)
print(f"数据已保存到 {output_file}")
else:
print("爬取失败")
end_time = time.time()
print(f"耗时: {end_time - start_time:.2f} 秒")