酷我音乐爬虫

from requests_html import HTMLSession
from fake_useragent import UserAgent
import os
import re
#判断网页是否为异步加载,刷新后抓包看第一个包再点preview看看是否有页面渲染,渲染就是异步加载
#再点击小黄人(XHR)找有你想要的内容的包
#找到包后再按headers找网址
#找到网址需要加请求头发request
#找到免费歌曲的网址规律破解付费歌曲的网址,点击播放时抓包抓到两个,看到preview,
#有个网址https://gw-sycdn.kuwo.cn/5b63cfead0048c38f3752d14a686e5fc/60632d0a/resource/n3/55/84/1190645813.mp3
#然后就找这个包对应的请求地址在headers里http://www.kuwo.cn/url?format=mp3&rid=166391234&response=url&type=convert_url3&br=128kmp3&from=web&t=1617112330668&httpsStatus=1&reqId=1fd1b5d1-915f-11eb-a9fc-a74f30446783

class Pa:
    def __init__(self):
        self.session = HTMLSession()
        self.singer=input('想听谁的歌呀:')
        self.page=3
        self.start_url=' '
        self.os_path = os.getcwd() + f'/{self.singer}/'
        self.headers={
            'Cookie': '_ga=GA1.2.387593542.1617107630; _gid=GA1.2.1534665002.1617107630; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1617107630,1617109657; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1617110185; kw_token=QUE6LY91RKT',
            'csrf': 'QUE6LY91RKT',
            'Host': 'www.kuwo.cn',
            'Referer': 'http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6',
            'User-Agent': UserAgent().chrome
        }

    def get_response(self,start_url,page):
            start_url=f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={self.singer}&pn={page}&rn=30&httpsStatus=1&reqId=f0830500-9158-11eb-b0a1-83f9d69777f7'
            response = self.session.get(start_url, headers=self.headers).json()  # 转为字典这个response就是字典类型了
            response_list = response['data']['list']
            return response_list

    def save_songs(self):
        for i in range(1,self.page+1):
            for data in self.get_response(self.start_url,i):
                rid = data['rid']
                title = data['name']
                next_url = f'http://www.kuwo.cn/url?format=mp3&rid={rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1617022552625&httpsStatus=1&reqId=17ef8120-908e-11eb-88c0-2360ee4180ff'
                resp = self.session.get(next_url, headers=self.headers).json()
                mp3_url = resp['url']
                data = self.session.get(mp3_url).content
                #print(''.join(re.findall('[^\/:?"<>|]',title)))
                if not os.path.exists(self.os_path):
                    os.mkdir(self.os_path)
                with open(self.os_path + ''.join(re.findall('[^\/:?"<>|]',title)) + '.m4a', 'wb')as f:
                    f.write(data)
                print(f'{title}====下载完成----!!!')


if __name__ == '__main__':
    a=Pa()
    a.save_songs()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值