序言

文中的文本及图片来自互联网,仅作学习培训、沟通交流应用,不具备一切商业行为,如有什么问题请立即在线留言以作解决 。

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数据库加密,这种基础绝大多数网址 ,只必须花点思绪剖析网址的数据信息 ,就可以抓取了 。

字体样式数据加密的网址实际上也不会太难,主要是抓取的全过程有点儿复杂 。奋斗吧

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归趣快排SEO www.SeogurUblog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▶61910465