思路:
随便找一个MV,打开抓包工具,找MP4路径,
发现这个MP4的url,但是如何获取这个url呢?总不能每次都抓包吧,
首先咱们用另外一个mv地址看看url有什么变化,发现这个url是经过某种加密并且是动态变化的,每次刷新都会改变其中的某个值,
url = ‘https://apd-5f946db4fe6eb60d8aaf46182d5637e1.v.smtcdns.com/mv.music.tc.qq.com/ASm_uPk1pI2KFYJr40N6TCNXXh0dYBtu7Ss0ZeVa2l7Q/CEC3229C31C109BB8AAA69861E4C7BE73424E0F911974D2E44F9BA61AEC717E1B96DC8AAA539F668B7AC7447CFBBD294ZZqqmusic_default/1049_M0149100003j82Bi2kAc9f1001690946.f9844.mp4?fname=1049_M0149100003j82Bi2kAc9f1001690946.f9844.mp4’
urk = ‘https://apd-a83db448f0df4796d3c3c9ff8566da0d.v.smtcdns.com/mv.music.tc.qq.com/Amqvgtf1A_QD46bnKjCHbzuZ9V9upP913NCLbYsxIA-g/45E926C873375BCD078AD644D52908D35E059FF103A27705833CDBF8EA6D61132D19629333085BBF336363501D6BAFCFZZqqmusic_default/qmmv_0a6bjyoobyfv2taabmgq4cycaubfhvdwthdwve4uiugqydqlbaaa.f9844.mp4?fname=qmmv_0a6bjyoobyfv2taabmgq4cycaubfhvdwthdwve4uiugqydqlbaaa.f9844.mp4’
于是思路就使用selenium来获取这个MP4的url,再保存二进制到本地即可
运行效果如下:
代码里已经做过详细注释,就不在细说了。
源码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/17 19:23
# @Author : huni
# @File : QQ音乐MV.py
# @Software: PyCharm
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import etree
from time import sleep
import os
if __name__ == '__main__':
# 实例化浏览器对象,传入浏览器驱动程序,运行之前用有界面的浏览器测试下
# driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# driver.maximize_window()
# 无头浏览器
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=chrome_options)
# 打开QQ音乐首页
driver.get('https://y.qq.com/')
# 定义搜索关键词内容(这里用《可惜没如果》演示)也可以定义input输入
key = '可惜没如果'
# 找到搜索框,输入关键词
sleep(2)
search = driver.find_element_by_class_name('search_input__input').send_keys(key)
# 找到搜索按钮并点击
s_btn = driver.find_element_by_xpath('/html/body/div[1]/div/div[1]/div[1]/button').click()
# 如果出现提醒,关闭提醒
sleep(6)
try:
warning = driver.find_element_by_xpath('//*[@id="divdialog_0"]/div[1]/a/i[1]').click()
except:
pass
# 找到”MV“按钮并点击
mvbtn = driver.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/a[3]').click()
sleep(3)
# 获取页面源码
html_source = driver.page_source
# 解析html
tree = etree.HTML(html_source)
href = tree.xpath('//*[@id="mv_box"]/div/ul/li[1]/div/a/@href')[0]
driver.get(href)
sleep(2)
# 获取mv页面源代码
html_source1 = driver.page_source
name = driver.title
tree1 = etree.HTML(html_source1)
src = tree1.xpath('//*[@id="video_player__source"]/@src')[0]
driver.close()
print(src)
print(name)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'
}
mp4_data = requests.get(url=src,headers=headers).content
mp4_name = name.split('-')[0] + '-' + name.split('-')[1] + '.' + src.split('.')[-1]
m_path = './MV音乐'
if not os.path.exists(m_path):
os.mkdir(m_path)
mp4_path = m_path + f'/{mp4_name}'
with open(mp4_path,'wb')as fp:
fp.write(mp4_data)
print(mp4_name,'下载完成')
写在后面:
如果觉得受用,还请打赏小编一下吧,感谢
拒绝白嫖,人人有责,哈哈哈哈哈哈哈