序言
文中的文本及图片来自互联网,仅作学习培训 、沟通交流应用,不具备一切商业行为,如有什么问题请立即在线留言以作解决。
PS:若有必须Python学习材料的小伙伴们能够加点一下正下方连接自主获得
python免费学习材料及其群沟通交流解释点一下就可以添加
小伙伴们说要听周董的歌曲 ,有什么网站是能够免费下的,随后他发觉咪咕音乐能够免费下周杰伦的歌曲,即然能够免费下 ,那简直能够爬了~
基础开发工具
- Python 3.6
- Pycharm
import requests import parsel
有关控制模块 pip
安裝就可以
总体目标网站数据分析
点一下播放按钮 ,会跳转到音乐播放网页页面
播放视频页面有一个下载按键,点一下下载 。
是必须登录账户
- 开启微信开发工具
- 挑选network
- 点一下马上下载
会有一个下载的api接口,post要求的api接口 ,里边回到的数据信息有带上声频真正详细地址。
拷贝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数据库加密,这种基础绝大多数网址 ,只必须花点思绪剖析网址的数据信息,就可以抓取了。
字体样式数据加密的网址实际上也不会太难,主要是抓取的全过程有点儿复杂。奋斗吧