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

博客介绍了获取MV的MP4链接的思路。因链接加密且动态变化,不能每次都抓包,故使用Selenium来获取MP4的url,再将二进制保存到本地。代码中有详细注释,最后作者希望读者打赏,拒绝白嫖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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




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

Python中使用Selenium爬取QQ音乐热歌榜TOP300需要安装SeleniumChromeDriver以及BeautifulSoup等库。以下是基本的步骤和示例代码,注意这只是一个基础框架,实际操作可能会因为网站结构的变化而需要调整: 首先,确保已安装以下库: ```bash pip install selenium beautifulsoup4 webdriver_manager requests ``` 然后,下载并配置好ChromeDriver(具体版本与您的浏览器对应)。接下来编写Python代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time from bs4 import BeautifulSoup # 初始化Chrome浏览器 def init_chrome_driver(): driver = webdriver.Chrome(executable_path='path_to_your_chromedriver') driver.maximize_window() return driver # 爬虫函数 def fetch_hot_songs(driver): # 设置等待条件 wait = WebDriverWait(driver, 10) # 访问QQ音乐热歌榜页面 driver.get("https://y.qq.com/n/yqq/toplist.html") # 找到滚动加载更多歌曲的区域 load_more_button = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".loadmore"))) songs_list = [] while True: # 等待页面加载完成 load_more_button.click() time.sleep(2) # 防止被识别为恶意请求,这里可以适当增加延时时间 # 获取网页源码 html_content = driver.page_source soup = BeautifulSoup(html_content, 'html.parser') # 解析歌曲信息 song_cards = soup.find_all('div', class_='song-item') for card in song_cards[:300]: # 这里假设最多获取300首歌,实际需检查是否到达底部 title = card.find('a', class_='title').text artist = card.find('span', class_='artist').text songs_list.append({'title': title, 'artist': artist}) # 判断是否有更多按钮存在,如果不存在则退出循环 if not load_more_button.is_displayed(): break driver.quit() return songs_list # 主程序入口 if __name__ == "__main__": driver = init_chrome_driver() hot_songs = fetch_hot_songs(driver) print(hot_songs)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值