查看网络请求,如下图,在左边箭头输入框输入mp4,右边链接即为真实的下载链接,不过这个链接有时效性。问题是怎么自己构造这样完整的链接或者能否在网页中找到?
往下拉,发现这个链接有两个参数,一个看起来是经过加密的,另一个参数则是时间戳。
用第一个参数名在源码页面搜索试试,发现在页面里出现了两次,第一次如下图,
把这个链接提出来解析看看是不是就是视频真实下载链接
import urllib.parse as parse
url = 'http%3A%2F%2Fvodkgeyttp8.vod.126.net%2Fcloudmusic%2FIDIwIDAgZWQwJDAgMSAwMA%3D%3D%2Fmv%2F5439243%2F59eb2b39fef7354514c5e767c9156a66.mp4%3FwsSecret%3De8fae21d7772111b6bb130ea1e06bcb7%26wsTime%3D1589115857'
real_url = parse.unquote(url)
print(real_url)
运行结果,一看确实是的,视频可以全屏,清晰度什么的和上面通过网络请求发现的视频链接一样
http://vodkgeyttp8.vod.126.net/cloudmusic/IDIwIDAgZWQwJDAgMSAwMA==/mv/5439243/59eb2b39fef7354514c5e767c9156a66.mp4?wsSecret=e8fae21d7772111b6bb130ea1e06bcb7&wsTime=1589115857
然后第二次出现在这个地方
同样把这段东西复制出来瞧瞧
text = 'hurl=http%3A%2F%2Fvodkgeyttp8.vod.126.net%2Fcloudmusic%2FIDIwIDAgZWQwJDAgMSAwMA%3D%3D%2Fmv%2F5439243%2Ff9de05a0aabea7e384354c41ed424990.mp4%3FwsSecret%3D21ed89ea2c65efd981c64deabf764eee%26wsTime%3D1589115857&murl=http%3A%2F%2Fvodkgeyttp8.vod.126.net%2Fcloudmusic%2FIDIwIDAgZWQwJDAgMSAwMA%3D%3D%2Fmv%2F5439243%2F59eb2b39fef7354514c5e767c9156a66.mp4%3FwsSecret%3De8fae21d7772111b6bb130ea1e06bcb7%26wsTime%3D1589115857&autoPlay=true&trackName=Dream It Possible&artistName=Delacey&resourceId=5439243&coverImg=http://p1.music.126.net/3PFVaUJN6u9Kz9liirZmzg==/18503681185620221.jpg&restrict=false&width=640&height=400'
text = text.split('&')
for i in text:
print(i)
得到这样一些东西
hurl=http%3A%2F%2Fvodkgeyttp8.vod.126.net%2Fcloudmusic%2FIDIwIDAgZWQwJDAgMSAwMA%3D%3D%2Fmv%2F5439243%2Ff9de05a0aabea7e384354c41ed424990.mp4%3FwsSecret%3D21ed89ea2c65efd981c64deabf764eee%26wsTime%3D1589115857
murl=http%3A%2F%2Fvodkgeyttp8.vod.126.net%2Fcloudmusic%2FIDIwIDAgZWQwJDAgMSAwMA%3D%3D%2Fmv%2F5439243%2F59eb2b39fef7354514c5e767c9156a66.mp4%3FwsSecret%3De8fae21d7772111b6bb130ea1e06bcb7%26wsTime%3D1589115857
autoPlay=true
trackName=Dream It Possible
artistName=Delacey
resourceId=5439243
coverImg=http://p1.music.126.net/3PFVaUJN6u9Kz9liirZmzg==/18503681185620221.jpg
restrict=false
width=640
height=400
hurl、murl这两个链接和第一次出现的链接貌似一模一样!解析这俩链接看看
hurl, murl = text[0][5:], text[1][5:]
print(parse.unquote(hurl))
print(parse.unquote(murl))
结果如下,仔细比较了一下,虽然不是完全一样,但是这两个链接却都是能下载视频的,只是在网页中显示时,初始视频大小不一样
那么现在就可以直接从网页源码中提取到真正的视频下载链接。写程序的话得用selenium才行,这是因为这个链接处于一个iframe中,如下图,用requests是获取不到iframe中的源码的