•  
  • "/song?id=456">歌曲2
  • 使用这个正则表达式进行匹配,可以得到两个结果:

    1. /song?id=123歌曲1

    2. /song?id=456歌曲2

    提取出榜单的音乐id和音乐名称

    使用正则表达式从HTML文本中提取歌曲的ID和标题。

    首先,使用re.findall()函数来查找所有匹配的字符串。

    正则表达式

  • (.*?)用于匹配以
  • 和任意字符(由(.*?)表示),最后是闭合的
  • 标签。

    在每次循环中,num_id变量存储歌曲的ID,title变量存储歌曲的标题。然后,通过print()函数将它们打印出来。

    实现批量下载

    成功获取id和名称之后,我们就可以准备进行下载的部分了

    尝试调用接口播放

    成功播放

    1. music_url = f'http://music.163.com/song/media/outer/url?id={num_id}.mp3'  
    2. # 对于音乐播放地址发送请求 获取二进制数据内容  
    3. music_content = requests.get(url=music_url, headers=headers).content  
    4. with open(filename +title +'.mp3', mode='wb') as f:        
    5. f.write(music_content)

    这段代码用于下载歌曲的MP3文件。

    首先,它使用f-string将歌曲ID插入到音乐URL中,生成完整的音乐播放地址。

    然后,通过requests.get()函数发送请求获取二进制数据内容。

    最后,使用open()函数以写入二进制模式打开一个文件,并将音乐内容写入该文件中。文件名由filenametitle拼接而成,并以.mp3作为扩展名。

    文件创建

    手动创建 / os模块自动创建

    博主这里选择用os模块创建

    运行程序

    爬取ing

    自动下载至路径文件夹

    如何爬取其他榜单?

    如果想要爬取其他的榜单的歌曲内容,只要更改请求url中的id

    切换榜单id,爬取成功!

    完整代码

    1. import requests  # 数据请求模块 第三方模块 pip install requests
    2. import re  # 正则表达式模块 内置模块 不需要安装
    3. import os  # 文件操作模块
    4. filename = 'music\\'
    5. if not os.path.exists(filename): # 如果没有这个文件夹则自动创建
    6.    os.mkdir(filename)
    7. # 如果想要爬取其他的榜单的歌曲内容,只要更改请求url中的id
    8. url = 'https://music.163.com/discover/toplist?id=3778678'
    9. # headers请求头 就是用伪装python代码的 把python代码伪装成浏览器对于服务器发送请求
    10. # 服务器接收到请求之后,会给我们返回响应数据(response)
    11. headers = {
    12.    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
    13. }
    14. response = requests.get(url=url, headers=headers)
    15. #print(response.text)获取网页源代码
    16. # 正则表达式提取出来的一个内容 返回是列表 里面每一个元素都是元组
    17. html_data = re.findall('
    18. (.*?)',response.text)
    19. for num_id, title in html_data:
    20.   # http://music.163.com/song/media/outer/url?id=436346833.mp3
    21.   music_url = f'http://music.163.com/song/media/outer/url?id={num_id}.mp3'
    22.   # 对于音乐播放地址发送请求 获取二进制数据内容
    23.   music_content = requests.get(url=music_url, headers=headers).content
    24.   with open(filename +title +'.mp3', mode='wb') as f:
    25.        f.write(music_content)
    26.   print(num_id, title)

    希望对你有帮助!加油!

    若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

  • 相关阅读:
    【无标题】菜市场
    知识融合介绍
    Android多线程学习:线程
    aop面向切面运用
    “懒宅经济”崛起,智能家电品牌快收好这份软文推广指南
    开源版商城源码V2.0【小程序 + H5+ 公众号 + APP】
    银行数仓项目实战(一)--什么是数据仓库
    南大通用GBase8s 常用SQL语句(238)
    RocketMQ中的消息存储结构及删除机制
    SNMP的监控
  • 原文地址:https://blog.csdn.net/Srlua/article/details/136358740