python爬取网易云音乐

这几天学习了python爬虫后开始动手爬取网易云音乐(https://music.163.com/)。打开网易云选择歌单 点击自己想要爬取的歌单,右键审查元素,点击网络
在这里插入图片描述在这里插入图片描述在此,状态码都是200表示通的。这里选择xhr,网易云是保存在xhr中,其他的网站有时直接在媒体中,F5刷新一下界面
在这里插入图片描述此时可以看到有一个.m4a结尾的。点击它,右侧的消息头中,出现的请求网址就是歌曲的真实网址。这个网址可以直接复制,在新的页面打开,就可以播放。
在这里插入图片描述
so am i
打开超链接的界面此时界面很简洁,点击右键可以保存歌曲。
使用python爬取整个歌单的歌曲才是真正解放生产力。

import requests
from lxml import etree
import re

headers = {
    'Referer':'http://music.163.com/',
    'Host':'music.163.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    }

bass_url = 'http://link.hhtjim.com/163/'
url = 'https://music.163.com/playlist?id=481273627'
request = requests.get(url,headers=headers).text
dom = etree.HTML(request)
ids_songs = dom.xpath('//a[contains(@href,"song?")]/@href')


ids_names = dom.xpath('//a[contains(@href,"song?")]/text()')

for ids_name, ids_song in zip(ids_names, ids_songs):

    count_id = ids_song.strip('/song?id=')
    count_name = ids_name.strip('\/:*?"<>|')
    if ('$' in count_id) == False:
        print(count_id)
        song_url = bass_url + '%s' % count_id + '.mp3'
        mp3 = requests.get(song_url).content
        print(count_name)
        with open('E:\\PycharmProjects\wangyiyun./%s.mp3' % count_name, 'wb')as file:
            file.write(mp3)
            

在写入文件名时。发现有一首歌曲叫“are you sure?”末尾带有问号。Windows系统文件命名规则中带?的为非法字符。此处需要去掉。count_name = ids_name.strip(’\ / : *?"<>|’)。或者用正则表达式。朋友还说能用base64编码来写。有兴趣的可以试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值