python 爬虫 selenium自动化爬取QQ音乐MV视频(解决动态加载的url)

思路:
随便找一个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,'下载完成')




写在后面:
如果觉得受用,还请打赏小编一下吧,感谢
拒绝白嫖,人人有责,哈哈哈哈哈哈哈
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值