当前位置: 首页 > news >正文

【Python趣味】:爬取音乐

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'
}

# 目标歌单URL
playlist_url = "https://music.163.com/playlist?id=714343781"

# 保存数据的CSV文件
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} 秒")
http://www.dtcms.com/a/104317.html

相关文章:

  • C# Winform 入门(2)之发送邮件
  • MyBatis基础五(动态SQL,缓存)
  • NFS 重传次数速率监控
  • xml中配置AOP织入
  • vxe-table 树表格启用树节点连接线的使用
  • 前端简单入门学习1——使用工具
  • 企业级NoSql数据库Redis集群
  • SQL Server 八大排序算法详解
  • 【Linux网络与网络编程】03.UDP Socket编程
  • Qt6调试项目找不到Bluetooth Component蓝牙组件
  • 实例中调用带有命名控件的成员
  • 判断一个字符串中排除空格和换行以外字符运行不同的逻辑
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day2
  • AIGC SD出图有缺陷有哪些方法可以解决?
  • nginx rewrite的相关功能
  • 算力100问☞第100问:算力竞争的关键领域?
  • 数据仓库建模-CIF方法中3NF建模的核心作用解析
  • “壹号土”和“壹号土猪”都是已注册商标!
  • MongoDB 核心机制解析
  • 深入解析力扣39.组合总和:回溯算法的妙用
  • --- 动态sql的使用 ---
  • 生成LoadX509KeyPair 需要的证书
  • <tauri><rust><GUI>基于rust和tauri,实现一个svg转png的工具
  • kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
  • FlutterWeb实战:02-加载体验优化
  • DPM(Defects Per Million,每百万缺陷数)和PPM(Parts Per Million,百万分之一)
  • php8属性注解使用教程
  • 前端:开源软件镜像站 / 清华大学开源软件镜像站 / 阿里云 / 网易 / 搜狐
  • leetcode22.括号生成
  • 基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面