import
execjs
import
os
import
requests
from
lxml
import
etree
import
time
from
hashlib
import
md5
class
Spider(
object
):
os_path
=
os.getcwd()
+
'/酷狗音乐歌曲/'
if
not
os.path.exists(os_path):
os.mkdir(os_path)
def
__init__(
self
):
self
.start_url
=
input
(
"请输入歌单网址:"
)
self
.headers
=
{
'user-agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0'
}
self
.song_url
=
'https://wwwapi.kugou.com/play/songinfo?'
def
parse_start_url(
self
):
response
=
requests.get(
self
.start_url,headers
=
self
.headers)
result
=
etree.HTML(response.text)
list_song
=
result.xpath(
'//div[@id="rankWrap"]/div[2]/ul/li'
)
for
song
in
list_song:
name
=
''.join(song.xpath(
"./@title"
))
data_eid
=
'
'.join(song.xpath('
.
/
@data
-
eid'))
self
.parse_song_url(name,data_eid)
def
parse_song_url(
self
,name, data_eid):
time_temp
=
int
(time.time()
*
1000
)
params
=
{
'srcappid'
:
'2919'
,
'clientver'
:
'20000'
,
'clienttime'
: f
"{time_temp}"
,
'mid'
:
'124e0d8616cb8c886f38199d1d7d759a'
,
'uuid'
:
'124e0d8616cb8c886f38199d1d7d759a'
,
'dfid'
:
'3ewkQY3GK5ek3noGYB11GWKK'
,
'appid'
:
'1014'
,
'platid'
:
'4'
,
'encode_album_audio_id'
: f
'{data_eid}'
,
'token'
:
'a9124664dcf39f27c5003bf04c7a011a9a896d99dff6ed2f695ee0324794658b'
,
'userid'
:
'1634527946'
,
'signature'
:
self
.parse_signature(time_temp,data_eid)}
response
=
requests.get(
self
.song_url, params
=
params, headers
=
self
.headers).json()
url
=
response.get(
'data'
).get(
'play_url'
)
self
.save_song(url,name)
def
save_song(
self
,url,name):
data
=
requests.get(url,headers
=
self
.headers).content
with
open
(
self
.os_path
+
name
+
'.mp3'
,
'wb'
) as f:
f.write(data)
print
(f
"歌曲 :{name} - - - 下载完成"
)
def
parse_signature(
self
,time_temp,data_eid):
s
=
''.join([
"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
,
"appid=1014"
,
f
"clienttime={time_temp}"
,
"clientver=20000"
,
"dfid=3ewkQY3GK5ek3noGYB11GWKK"
,
f
"encode_album_audio_id={data_eid}"
,
"mid=124e0d8616cb8c886f38199d1d7d759a"
,
"platid=4"
,
"srcappid=2919"
,
"token=a9124664dcf39f27c5003bf04c7a011a9a896d99dff6ed2f695ee0324794658b"
,
"userid=1634527946"
,
"uuid=124e0d8616cb8c886f38199d1d7d759a"
,
"NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
])
sign
=
md5(s.encode()).hexdigest()
return
sign
if
__name__
=
=
'__main__'
:
s
=
Spider()
s.parse_start_url()