码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python爬虫实战-批量爬取下载网易云音乐


    大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战icon-default.png?t=N7T8https://blog.csdn.net/caoli201314/article/details/132882813
    1小时掌握Python操作Mysql数据库之pymysql模块技术icon-default.png?t=N7T8https://blog.csdn.net/caoli201314/article/details/133199207
    一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、seleniumicon-default.png?t=N7T8https://blog.csdn.net/caoli201314/article/details/134071440

    近日锋哥又卷了一波Python实战课程-批量爬取下载网易云音乐,主要是巩固下Python爬虫基础

    视频版教程:Python爬虫实战-批量爬取下载网易云音乐icon-default.png?t=N7T8https://www.bilibili.com/video/BV1aw411M72B/

    网易云音乐官方主页:

    https://music.163.com/

    比如我们打开邓紫棋的主页:

    https://music.163.com/#/artist?id=7763

    现在我们要爬取这里面的音乐文件,我们正常人的分析思路是这样的。

    1. 思路:
    2. 1,根据歌手链接地址获取页面源码
    3. 2,解析页面源码获取所有歌曲列表
    4. 3,遍历,下载每首歌曲

    前面两步很简单,很容易实现。

    第三步,我们点 音乐列表 前面的播放按钮,当前页面底部会出现播放器,播放音乐。

    谷歌 F12 进入开发者工具,点 Media 我们是可以得到音乐的源文件的。包括VIP音乐

    我们要通过Python得到这个请求地址,需要进行js逆向,破解,得到js方法源代码,然后进行模拟拼接动态请求,得到音乐二进制文件,锋哥上有老,下有小,容易受到律师函,进去踩缝纫车,就不搞这种方式。

    我们还是采用网易云官方提供的API接口进行获取音乐文件,包括在线播放。

    网易云音乐开放接口:http://music.163.com/song/media/outer/url?id=歌曲ID  (VIP音乐下载不了)

    完整可运行代码如下。具体代码分析,可以看帖子开头的视频教程

    1. """
    2. 思路:
    3. 1,根据歌手链接地址获取页面源码
    4. 2,解析页面源码获取所有歌曲列表
    5. 3,遍历,下载每首歌曲
    6. python爬虫前置基础视频教程:http://python222.com/post/7
    7. 备注:网易云音乐开放接口:http://music.163.com/song/media/outer/url?id=歌曲ID (VIP音乐下载不了)
    8. 测试:https://music.163.com/#/artist?id=7763
    9. 仅供学习测试
    10. """
    11. import requests
    12. from bs4 import BeautifulSoup
    13. headers = {
    14. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    15. }
    16. # 获取用户输入的歌手链接页面
    17. singer_url = input("请输入您要下载的歌手页面链接:")
    18. # 格式化下载链接
    19. url = singer_url.replace("/#", '')
    20. response = requests.get(url=url, headers=headers)
    21. # print(response.text)
    22. # 实例化bs4
    23. soup = BeautifulSoup(response.text, 'lxml')
    24. # 获取歌曲列表
    25. song_list = soup.select("ul.f-hide li a")
    26. print(song_list)
    27. def download_song(song_name, song_id):
    28. """
    29. 下载歌曲
    30. :param song_name: 歌曲名称
    31. :param song_id: 歌曲ID
    32. :return:
    33. """
    34. music_open_api = "http://music.163.com/song/media/outer/url?id=" + song_id
    35. music = requests.get(url=music_open_api, headers=headers)
    36. # 下载歌曲
    37. try:
    38. with open(f"./music/{song_name}.mp3", 'wb') as file:
    39. file.write(music.content)
    40. print(f"《{song_name}》下载成功")
    41. except:
    42. print(song_name, "下载异常")
    43. for song in song_list:
    44. # 获取歌曲名称
    45. song_name = song.text
    46. # print(song_name)
    47. # 获取歌曲ID
    48. song_id = song['href'].split("=")[1]
    49. # 下载歌曲
    50. download_song(song_name, song_id)

  • 相关阅读:
    netty系列之:我有一个可扩展的Enum你要不要看一下?
    Leetcode算法解析——查找总价格为目标值的两个商品
    每日学到 43 - JavaScript中BOM和DOM
    小李移动开发成长记 —— 大话小程序
    含碘稀土铕(Ⅲ)配合物荧光微球/稀土铕配合物掺杂功能化二氧化硅微球的制备方法
    c语言入门---字符函数和字符串函数
    MySQL数据库(三)日志、主从复制、分库分表、读写分离
    关于使用KEIL建立STM32项目(附带建立好的工程以及注意事项)
    英语单词记忆(词缀 / 后缀)
    Util 应用框架 UI 全新升级
  • 原文地址:https://blog.csdn.net/caoli201314/article/details/134175839
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号