首页 > 编程语言 >Python爬虫实战,Request+urllib模块,批量下载爬取网易云音乐飙歌榜所有音乐文件

Python爬虫实战,Request+urllib模块,批量下载爬取网易云音乐飙歌榜所有音乐文件

时间:2022-12-08 16:14:30浏览次数:49  
标签:fp 飙歌 音乐文件 Python 爬取 headers music 模块 id

前言

今天给大家介绍的是Python爬取飙歌榜所有音频数据并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得。

首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样的纯文本数据爬取的人会很多,所以我们需要考虑更换代理IP和随机更换请求头的方式来对音乐数据进行爬取。

在每次进行爬虫代码的编写之前,我们的第一步也是最重要的一步就是分析我们的网页。

通过分析我们发现在爬取过程中速度比较慢,所以我们还可以通过禁用谷歌浏览器图片、JavaScript等方式提升爬虫爬取速度。

开发工具

Python版本: 3.8

相关模块:

requests模块

re模块

urllib模块

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

思路分析

浏览器中打开我们要爬取的页面
按F12进入开发者工具,查看我们想要的音乐数据在哪里
这里我们需要页面数据就可以了

源代码结构

找规律

代码实现

# 存放音乐文件的文件夹
folder = r'F:\music'
if not isdir(folder):
    mkdir(folder)

# 音乐飙升榜地址
url = 'https://music.163.com/discover/toplist?id=3779629'
# 模拟Chrome浏览器
headers = {'User-Agent': 'Chrome/88.0.4324.190'}
req = Request(url, headers=headers)
# 读取网页源代码
with urlopen(req) as fp:
    content = fp.read().decode()

# 正则表达式,提取音乐id和名字
pattern = r'<li><a href="/song\?id=(.+?)">(.+?)</a></li>'
for music_id, music_name in findall(pattern, content):
    music_file = rf'{folder}\{music_name}.mp3'
    if isfile(music_file):
        print(f'文件已存在,跳过...{music_name}')
        continue
    # 下载地址
    download_url = rf'https://music.163.com/song/media/outer/url?id={music_id}'
    req = Request(download_url, headers=headers)
    # 读取网络音乐文件数据,写入本地文件
    with urlopen(req) as fp:
        content = fp.read()
    with open(music_file, 'wb') as fp:
        fp.write(content)
    print(f'下载完成...{music_name}')

结果展示

结果

最后

今天的分享到这里就结束了 ,感兴趣的朋友也可以去试试哈

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦

觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

标签:fp,飙歌,音乐文件,Python,爬取,headers,music,模块,id
From: https://www.cnblogs.com/guzichuan/p/16966373.html

相关文章

  • python字典
    python字典字典由key和value组成,一个key对应一个value,且key不能重复,这样我们能通过key来访问value。我们可以通过以下两中方式创建一个空字典dic1={}dic2=dict()......
  • 安装完python3,删掉了centos自带的python2,执行yum出错。
    bash:/usr/bin/yum:/usr/bin/python:badinterpreter:Nosuchfileordirectory原因删掉了centos自带的python。这是因为yum采用python作为命令解释器,原来系统自带......
  • (11)python 模块和包
    一、导入模块和包模块相当于一个.py文件,包相当于带有个__init__.py一个文件夹,既可按模块导入也可按包导入。1.导入模块或包import包名或模块名(as别名),包名或模块名(as......
  • 第八章python实训
    实验报告【实验目的】 1.掌握Python内置的标准模块和第三方模块的使用。【实验条件】1.PC机或者远程编程环境。 【实验内容】1.完成第八章  文件及目录操作实......
  • python将软件包和所有的依赖都下载到本地的目录?
    实现这个功能,只需2步 1、创建目录 目录用于存放包及其依赖 mkdir/root/rdbtools  2、安装软件 这里安装rdbtoolspython-lzf 重点:--download参......
  • python 包管理
    python官方的第三方库的仓库:​​https://pypi.org/​​ pip是python的包管理工具pip--version#查看当前版本 安装pipinstall-Upip#升级pippipinstall包名==1.0.4......
  • Python 解释器
    命令行输入py进入解释器py退出解释器quit() 1.在命令行输入多行会显示...  2.文件字符编码py默认文件的字符编码为utf-8如果使用其他类型,在文件的开头#-*-coding:gb23......
  • python列表
    列表的运用1.减少元素(1)dells[]place=['lasa','chengdu','litang','xian','lundon']delplace[0]#输出['chengdu','litang','xian','lundon']还可以删......
  • 强化学习——QLearning和Sarsa算法及其Python实现
    主要是强化学习的课程,作业中涉及到了QLearning和Sarsa算法,特此记录。宝藏博主的强化学习专栏中包含了这两个算法的讲解,极为清晰,非常推荐。链接:机器学习+深度学习+强化学......
  • Micropython——UART串口(蓝牙)
    文章目录​​HC-06蓝牙模块​​​​接线​​​​连接手机APP调试​​​​调试注意事项​​​​测试代码​​​​测试发送代码​​​​测试接收代码​​​​发送数据​​​​......