哎,一言难尽啊。终于是现有的知识点是爬不了这个了,查了一下,可以通过自动化来爬
import requests
import re
import json
import os
from fake_useragent import UserAgent
class WyyMusic:
def __init__(self,search):
self.search = search
self.url = f'https://music.163.com/#/search/m/?s={search}&type=1'
self.headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
'referer':'https://music.163.com/',
'origin':'https://music.163.com',
'cookie':'ANTICSRF=feb39ad0fcf637cc4d96a3509c79b735; _iuqxldmzr_=32; _ntes_nnid=bb7618203efa4ff88daed77ea7ffe044,1621841609953; _ntes_nuid=bb7618203efa4ff88daed77ea7ffe044; playliststatus=visible; NMTID=00Oimg2QKVKib82kU9OkR3NvuOfhNkAAAF5nUsHeA; WEVNSM=1.0.0; NTES_P_UTID=HWdyCCmsKwnQJyka2t4pcp6Gs8rEU5yM|1629529174; NTES_SESS=BkMvI7uFUs_jL1Sc_rg8Oj0g07DuT7NJ2Vke6aL.wm.Z15ST1ltocJUAR86DoHqEIoXb5PGZjZbBGUV1DOfx9AtlJIkqOfHD.PzBPOliVRmf_6VLSZTUu8BOCgCwjF.l6BUgXNObtSCHoTkYKHP185_wMaV0lTqnQYGJgXaoWsWQnbXZzZ1JQwACpgG7ACVAOgWVFh2nh2.4J; S_INFO=1629529174|0|3&80##|keqikejigs; P_INFO=keqikejigs@163.com|1629529174|1|mail163|00&99|null&null&null#zhj&330100#10#0#0|&0||keqikejigs@163.com; nts_mail_user=keqikejigs@163.com:-1:1; WNMCID=ocbbsu.1629529179760.01.0; MUSIC_EMAIL_U=f83881b49a1c16cadcf5ac1710c2d69f54ac82e273e299c8d4fd2d668c66e5f41a56d035701f552ba108086b4df3203f; WM_TID=jryaWgQ2efJAFEVEUVM%2BqCGXxlF2oWJY; WM_NI=3Mj56ULBUx%2BOGJKskTJKvXjAIbAnGl8DEDMqPtWAWyfnOaxwAr6aZOmdrb1ZtaUNXSwQ863lynJr1ocZyA%2FW%2BZTEs9AQiv1vOpN%2FhwLQq0P0ak3bpM2RnZL2TJ8elCE0OTU%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee84d033f786b7d9ae49909e8fa6c85a828e9a85ae7a9cbba3acf84ff8a6f8b9e52af0fea7c3b92af193a6d6b55f909e9b99aa4585968594ea608a95bab9e94b8bbe8f8fc668fc9c8ba5d07b94ac99a2d673a6b28182fb7d83aefa82d945afbcbe83b452b8bf9bafdb59b58ff8d7b268bbb28693b465a186b7a2ae5de9869ca6f233838fa797b47e8db082d0eb7d908fbfd1d33ca3b5fd83f347f28ea2bbcf3a9896f886ef4987f081b5d837e2a3; __csrf=8d48a3390cfddcca448748ac8a3f4336; MUSIC_U=9de0b492647e4661a11727f68f6820e69c5b92cfadd658304ea2fb4ad665cf3d194671dccbe0aa23c21681f441c3781756f8ed9e5654306722fac3ef9d6f10fce758fe0f42e01662ad811b647f556b6fd427f2c8160bfdad; ntes_kaola_ad=1; playerid=47034938; JSESSIONID-WYYY=QZe%2Fb13lsSWgC9i5msdsWPfnNRsj4rFnlf6x6uEyu9vS4GBh0sEpGVjDEba8zNIKvlOYWcOliGh7UEZAAMYD9zE6SUE4zAEtC6GU%5CaKD3iY0IX%5CbZgZeaq2FOxEmdF5qB4wakdma1fHeV1%2BvCrrom2l%5CQAqAWW%2FXr0t0niYseHRCahKD%3A1642252964074; NTES_PC_IP=%E6%9D%AD%E5%B7%9E%7C%E6%B5%99%E6%B1%9F; BAIDU_SSP_lcr=https://www.baidu.com/link?url=rN_tdMxRAsEkftwKnSdMDGKpwcVtWgwpYoN-MXPibX7&wd=&eqid=99bffc01001842fb0000000461e2c76',
}
self.checkDir(search)
# 创建搜索内容对应的文件夹
def checkDir(self,dirName):
if not os.path.exists(dirName):
os.mkdir(dirName)
def getMusicList(self):
url = 'https://music.163.com/weapi/feedback/weblog?csrf_token=8d48a3390cfddcca448748ac8a3f4336'
# 这里的data中的参数都是经过加密的,每次搜索之后的值都不一样。这里加密的内容其中包含搜索的关键字
data = {
'params':'1hVfQtA4/8nuEwLs0ehPQwQWcP92tnCkYLLiLdP1MmDELsAzDA3uvqSGtwoN1x9jABm+gNhXgkjukv2r12+i70U71XFWhkcRQiuwAAb+Mm1WorLY4VavkoYNXl3TAGRm',
'encSecKey':'1df10a27978aaa3176896aca3bff89408476a67b834488b7d807aadb957ab94516b99cfd54921f14ddec9a85fccf5c87fc8110f95cd4ff623a0d2a4fe333d7d6cd4f190aaed88866a3c1a9d400cde3d2880a5aaf08fb1cf6262b904544e32273411594099f80363b9164cb21f0a13fbd5156910f787c347b54595aaa91737730'
}
try:
response = requests.post(url, data=data, headers=self.headers)
result = json.loads(response.text)
songs = result['result']['songs']
for song in songs:
# print(f'歌曲名称为:【{song["name"]}】,音乐ID:{song["id"]}')
songLink = 'https://music.163.com/song/media/outer/url?id=' + str(song['id'])
print(f'下载歌曲{song["name"]}中...')
self.downLodeSong(song["name"], songLink)
except Exception as error:
print('错误代码:',error)
# 下载歌曲
def downLodeSong(self,name,link):
headers = {
'Referer': 'https://music.163.com/search/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
result = requests.get(link,headers=headers)
try:
if result.status_code == 200 :
with open(f'{self.search}/{name}.mp3','wb') as file:
file.write(result.content)
print(f'{name}歌曲下载完成')
else:
print(result.reason)
except Exception as error:
print(error)
print('下载完成')
search = input('请输入关键词')
wyy = WyyMusic(search)
wyy.getMusicList()