seleinum+requets 下载歌曲

鉴于某云某狗某q好的音乐都要收费,于是冲浪找了一个可以免费下载音乐的网站(说是免费,某些禁歌也需要钱,不过一般的都有,接下来我就通过这个网站,演示一下怎么通过selenium webdriver下载歌曲)

一、准备材料

  • 1.python
    2.pycharm编辑器(支持python的编辑器都可)
    3.selenium
    4.Chromedriver(下载当前浏览器的对应版本,放到python安装主目录文件夹里面)
    5.被爬取的网站一个
    6.一个歌曲单子txt

二、我的准备工作(可参考)

  • 1.python版本以及chromedriver的存放地址

[外链图片转存失败,源站可能有防盗]!链机制,建(https://img-Ft-log.csdnimg.cn/2021062310005669.png?xoss-process=image/water

  • 2.Chromedriver的下载地址:http://npm.taobao.org/mirrors/chromedriver/
    3.查看google的版本:浏览器右上角-帮助-关于浏览器,查看版本,下载对应的即可
    4.被爬取的网站:“http://www.fangpi.net/”
    5.一个txt文档,里面的歌曲和歌手用英文字符的,隔开
    在这里插入图片描述

三、开整

# coding = utf8
import selenium
import requests
import time
'''如果出现:SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 85
解决:
pip install webdriver-manager
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
'''
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

import logging
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

*写一个主体方法,需要传入的参数有url和需要下载的歌曲的listlist是一个处理后的列表*
def get_music(url,get_music_list):
    #防止浏览器自动关闭
    global driver
    # driver = webdriver.Chrome(executable_path='D:\python\chromedriver.exe')
    driver = webdriver.Chrome(ChromeDriverManager().install())
    # driver = webdriver.Chrome(executable_path="E:\Python3.9.0\chromedriver.exe")
    print(get_music_list)
    #循环列表中的元素(元素包含列表:歌曲和歌手)
    for i in get_music_list:
    	#[['句号', 'G.E.M.邓紫棋'], ['孤独', 'G.E.M.邓紫棋']]
    	#i[0]是歌曲名字,i[1]是歌手
        logging.info("开始搜索下载" + i[0])
        driver.get(url)
        time.sleep(2)
        driver.find_element_by_id("s-input").send_keys(i[0])
        time.sleep(0.5)
        driver.find_element_by_id("s-btn").click()
        time.sleep(2)
        singer = driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div/table/tbody/tr[1]/td[2]").text
        print(singer)
        if singer == i[1]:
            driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div/table/tbody/tr[1]/td[1]/a").click()
            time.sleep(2)
            # 这一步会打开新窗口
            driver.find_element_by_id("btn-download-mp3").click()
            time.sleep(3)
            # 获取浏览器句柄
            windowstabs = driver.window_handles
            print(windowstabs)
            # 如果下载歌曲打不开说明是收费的,就没有新窗口,长度就为1
            if len(windowstabs) ==2:

                # 获取当前浏览器的窗口的句柄
                currenttab = driver.current_window_handle
                print(currenttab)
                # 切换到新窗口
                driver.switch_to.window(windowstabs[1])
                # 获取当前选项卡url
                href_value = driver.current_url
                #使用requests去访问地址,进行一个下载
                response_value=requests.get(href_value)
                music_name = "E:\Python_study\音乐下载" + '\\' + i[0] + ".mp3"
                print(music_name)
                with open(music_name,"wb") as m:
                    m.write(response_value.content)
                m.close()
                time.sleep(1)
                #关闭当前下载窗口
                driver.close()
                # 获取浏览器句柄
                windowstabs = driver.window_handles
                print(windowstabs)
                # 进入第一个句柄,因为之前关掉了一个窗口,浏览器失去焦点需要重新定位
                driver.switch_to.window(windowstabs[0])
                time.sleep(2)
            else:
                print("没打开新页面,这歌要钱:" + i[0])
        else:
            print("这首歌没有找到:" + i[0])
            pass
    #下载完了关闭整个浏览器
    driver.close()

def open_list():
    music_all = []
    # 打开文件
    with open("music_list.txt","r",encoding='utf8') as r:
        # 循环每一行,获取每一个去除回车,每一个元素用逗号划分
        for line in r.readlines():
            lines = line.replace("\n", "").split(",")
            # 写入列表
            music_all.append(lines)
    print(music_all)
    return music_all

if __name__ == '__main__':
    url="http://www.fangpi.net/"
    get_music_list = open_list()
    get_music(url,get_music_list)

四、运行后截图

在这里插入图片描述
在这里插入图片描述

五、over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值