前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

小伙伴说想听周杰伦的音乐,有什么网站是可以免费听的,然后他发现咪咕音乐可以免费听周杰伦的歌曲,既然可以免费听,那岂不是可以爬了~

基本开发环境

  • Python 3.6
  • Pycharm
import requests
import parsel

相关模块 pip 安装即可

目标网站分析


点击播放按钮,会自动跳转到音乐播放页面


播放界面有一个下载按钮,点击下载。

是需要登陆账号

  • 打开开发者工具
  • 选择network
  • 点击立即下载

会有一个下载的数据接口,post请求的数据接口,里面返回的数据有携带音频真实地址。



复制url地址,是会自动下载文件到本地的

既然是post请求,只需要看data参数的变化,看它需要传递那些参数

多查看几首歌曲的下载氢气,就可以发现 copyrightId 就是每首音乐的ID值,只需要获取每首歌曲的ID值,就可以下载音乐了。

所以返回到周杰伦的音乐列表页


可以发现音乐列表页是静态网站,获取可以直接用过requests请求网站解析网站数据,可以获取音乐的ID值以及标题。

现在就是剩下最后一个问题了,那就是翻页,多页获取。

对于翻页爬取,只需要点击下一页,查看url地址的变化,找到其对应的变化规律即可。


page就是对应的页码,所以翻页爬取也搞定了,接下来就是写代码就好了

1、请求网页获取音乐的ID值以及标题

cookie 我就不带了,你可以自己登陆咪咕音乐之后复制开发者工具里面的

ef get_mp3_info(url):headers = {'cookie': '','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}response = requests.get(url=url, headers=headers)selector = parsel.Selector(response.text)lis = selector.css('#J_PageSonglist > div.songlist-body > div')for li in lis:page_url = li.css('.song-name-txt::attr(href)').get()mp3_id = page_url.split('/')[-1]title = li.css('.song-name-txt::attr(title)').get()

2、post请求获取音乐下载地址

这里 headers 参数可以不用写这么多,为了方便就直接复制粘贴了,因为是post请求,有一些参数是必要带的,不然得到想要的返回结果。

def get_mp3_url(mp3_id, title):url = 'https://music.migu.cn/v3/api/order/download'headers = {'authority': 'music.migu.cn','method': 'POST','path': '/v3/api/order/download','scheme': 'https','accept': '*/*','accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','content-length': '42','content-type': 'application/x-www-form-urlencoded; charset=UTF-8','cookie': '','origin': 'https://music.migu.cn','pragma': 'no-cache','referer': 'https://music.migu.cn/v3/music/order/download/60054701923','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36','x-requested-with': 'XMLHttpRequest',}data = {'copyrightId': '{}'.format(mp3_id),'payType': '01','type': '1'}response = requests.post(url=url, data=data, headers=headers)html_data = response.json()mp3_url = html_data['downUrl']

3、保存音乐至本地

保存代码还是比较简单,也是常用的 with open

def download(download_url, title):response = requests.get(url=download_url)path = '音乐\\' + title + '.mp3'with open(path, mode='wb') as f:f.write(response.content)

具体实现效果

有一部分的音乐任然还是需要付费的,所以当你post请求付费音乐的时间,是没有下载地址的,可以写一个判断

总结

代码可以优化,这只是最简易版本的爬虫代码,下载速度并不是很快,可以使用多线程爬取,速度更佳,可以自己去动手优化。

爬虫不难,主要是在于分析网站,除非涉及严重加密的网站,比如字体加密,JS数据加密,这些基本大部分网站,只需要花点心思分析网站的数据,就可以爬取了。

字体加密的网站其实也不难,主要是爬取的过程有点繁杂。加油吧

Python批量爬取华语天王巨星周杰伦的音乐相关推荐

  1. python自动搜索爬取下载文件-python批量爬取下载抖音视频

    本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...

  2. 疫情过去女朋友想去重庆玩,python批量爬取小猪短租重庆民宿信息

    疫情过去女朋友想去重庆玩,python批量爬取小猪短租重庆民宿信息 随着时间的流逝,在中国共产党的领导,全国人民的共同努力下,疫情逐渐受到了控制,逐渐好转,复工,开学有望.最近在和女朋友的闲聊当中得知 ...

  3. Python批量爬取王者荣耀英雄高清壁纸

    Python批量爬取王者荣耀英雄高清壁纸 文章目录 Python批量爬取王者荣耀英雄高清壁纸 前言 爬虫步骤 python代码实现 总结 前言 很多喜欢玩王者的朋友很希望把王者荣耀的英雄图片拿来做壁纸 ...

  4. python 批量爬取网易云音乐,java解密

    每天一点点,记录学习 python 批量爬取网易云音乐 网易云音乐,排行榜,右键,显示网页源代码,并不能找到任何一首歌的id,是因为java加密了 随便找一首id为1374061038的歌,在网页源代 ...

  5. python爬虫笔记(八) 实例3:用Python批量爬取全站小说【以书趣阁为例】

    1. 用Python批量爬取全站小说 爬取这个网站小说:http://www.shuquge.com/txt/89644/index.html 2. 爬取一本书 # -*- coding: utf-8 ...

  6. python webshell_使用 Python 批量爬取 WebShell

    使用 Python 批量爬取 WebShell 还在用爬虫爬一些简单的数据?太没意思了!我们来用爬虫爬 WebShell! 0. 引子 前些天访问一个平时经常访问的网站,意外的发现这个站出了问题,首页 ...

  7. 最新 用Python 批量爬取网上图片

    标题 最新 用Python 批量爬取网上美眉图片 故事是这样的:七月份给室友说,我要开始学习Python了.室友一脸懵,并问我Python是啥?确实对于我这个小城市来说Python之风还没有吹到我们这 ...

  8. Python批量爬取简历模板

    文章目录 前言 一.需求 二.分析 1. 查看网页源码(ctrl+u) 2.进一步分析 三.处理 四.运行效果 前言 为了更好的掌握数据处理的能力,因而开启Python网络爬虫系列小项目文章. 小项目 ...

  9. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

最新文章

  1. 【转】在OpenGL场景中实现小地图功能
  2. LVM学习之LVM基础
  3. UIScollerViewUIPageControl的一些使用方法
  4. 如何搞定SVN目录的cleanup问题和lock问题
  5. 20-思科防火墙:Network Static NAT:网络静态NAT
  6. 五个工业风满满的 Look-alike 算法
  7. mongodb - 查看正在执行的操作
  8. 高效万进制——蓝桥杯|HDOJ 1002 大数加法——30行代码AC
  9. 7-34 红色警报 (10 分)(结构体并查集)
  10. stm32数据手册boot_STM32问题集之BOOT0和BOOT1的作用
  11. ★LeetCode(704)——二分查找(JavaScript)
  12. 服务器如何安装虚拟声卡,虚拟声卡驱动VirtualAudioCable安装使用设置教程
  13. KETTLE使用教程(包含几个小示例)
  14. python学习实验报告(第五周)
  15. 51单片机流水灯现象1
  16. 移动100m宽带慢的要死_wifi慢到快崩溃明明100m宽带却像2m的网速教你1招快速解决...
  17. 监控之美——监控之美-监控系统选型分析及误区探讨
  18. 我的职业生涯(八) 自我疗伤
  19. 2021年移动开发者未来的出路在哪里,年薪50W
  20. 客户资料搜索软件_电销都是从哪些地方获得客户资源?可以快速采集客户资料吗?...

热门文章

  1. 纯CSS3流光边框特效
  2. jadx重新打包_反编译一款APP然后重新打包(Windows环境)
  3. linux系统解压缩rar文件夹,linux下解压缩rar文件的办法
  4. 修改织梦cms模板大全,织梦建站必看宝典
  5. “宝付金融知识普及月”利益相关请务必关注
  6. 云币网及KYC【区块链生存训练】
  7. Python数据分析案例07——二手车估价(机器学习全流程,数据清洗、特征工程、模型选择、交叉验证、网格搜参、预测储存)
  8. PID详解3(摄像头循迹分析)
  9. Latex证明环境:白方块/黑方块
  10. flowable 查询完成的流程_flowable流程引擎初体验,完成一个请假流程