爬取酷狗歌曲并进行下载用的是selenuim

爬取酷狗歌曲并进行下载用的是selenuim

1. 请求的url并发起请求
2. 定位元素,循环遍历
3. 窗口的转移
4. 获取歌曲的下载路径
5. 保存到指定的文件里面
6. 总结

开始来看看吧
首先大家还是先导一下包吧,也就那几个好吧:
不会导包的看下我写的这篇哟https://blog.csdn.net/XY52wiue/article/details/112975003

import requests
from selenium.webdriver import Chrome,ChromeOptions
import os
import time

一:请求的url并发起请求

我这里直接到音乐里面,这里不涉及登录,可以不用想那么多,哈哈哈哈。

url = 'https://www.kugou.com/yy/rank/home/1-8888.html?from=homepage'

进行伪装:

headers = {
     
        "User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
    }

发起请求,并且以utf-8的格式进行读取数据:
如果有看不懂的,可以看下我前面几篇文章:

response = requests.get(url=url,headers=headers)
    #手动设定响应数据的编码格式
    response.encoding = 'utf-8'
    page_text = response.text
    #这个就是再后台上面运行那个浏览器,不在表面上占用你的
    option = ChromeOptions()
    option.add_argument('--headless')
    option.add_argument("--no-sandbox")
    option.add_experimental_option('excludeSwitches',['enable-automation'])
    #这里也要输入
    browser = Chrome(options=option)
    browser.get(url)

二:定位元素,并进行循环遍历 到了这一步可是重点了

爬取酷狗歌曲并进行下载用的是selenuim_第1张图片

可以看到上图,大家按着顺序走就行,按住crtl+f 出现那个框框,把copy-xpath粘贴s上去,看到是1 of 1 ,这很正常,我们所定位的只有一个元素,要把一页的数据搜索出来很简单,把li[1]的[1]去掉就像了,【中括号也要一起去掉】
爬取酷狗歌曲并进行下载用的是selenuim_第2张图片

下面看下代码:

n = 1 #为后面切换窗口循环做准备
    #把要取的类名统统取出来,找到他,注意是elements,所以不止是一个
    li_list = browser.find_elements_by_xpath('//*[@id="rankWrap"]/div[2]/ul/li')
    for li in li_list:
        browser.switch_to.window(browser.window_handles[-1])
        #歌曲名字
        li_name = li.find_element_by_xpath('./a').get_attribute('title')
        #歌曲的url
        li_url = li.find_element_by_xpath('./a').get_attribute('href')
        #进行测试一下,是否走到这一步
        print(li_name, li_url)
        #点击标题,跳转
        # 把要取的类名统统取出来,找到他,注意是elements,所以不止是一个
        alist = browser.find_elements_by_class_name('pc_temp_songname')
        # 因为我们要对这个名字点击事件,循环他,在进行点击
        for a in alist:
            a.click()
            browser.switch_to.window(browser.window_handles[-1])
            time.sleep(1)
            #歌曲的下载路径
            song = browser.find_element_by_xpath('//*[@id="myAudio"]').get_attribute('src')
            #歌曲的名称
            song_name = browser.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[2]/div[1]/span').get_attribute('title')
            # print(song)

对于上述注释不理解的可以评论区问哟

三、窗口的转移

browser.switch_to.window(browser.window_handles[-1])
#关闭这些窗口
browser.close()
#切换上一个窗口
browser.switch_to.window(browser.window_handles[0])
#进行下一个点击事件
n += 1

四:获取下载的路径

对于新打开的窗口进行获取下载连接MP3:
找到flash播放插件就可以进行下载:【注意一下,这里如果有窗口弹出来的话不用进行理会,我们不需要点击什么,只是要一个元素而已,所以不管。】
爬取酷狗歌曲并进行下载用的是selenuim_第3张图片

五、保存到指定的文件里面:

 #创建歌曲的文件
            if not os.path.exists('./音乐'):
                os.mkdir('./音乐')
                #对新的发起一个请求
            song_data = requests.get(url=song, headers=headers).content
            song_path = '音乐/' + song_name
            #新进去
            with open(song_path, 'wb') as fp:
                fp.write(song_data)
                print(song_name, '下载成功!!!')

这里也与我前面几篇文章一样就行。
最后进行播放:

from pygame import mixer
import time
#进行初始化
mixer.init()
#获取路径
mixer.music.load('E:\python\program1\抓包\音乐\ 星辰大海')
#播放
mixer.music.play()
#播放的时间有多久
time.sleep(1000)
#关闭
mixer.music.stop()

六:总结

这次抓取的时候有个弹窗问题一直困扰我,就是点进歌曲里面要弹出窗口,第一次会出现,但后面再次进入就不会,网上找了很多,没咋个判断出来,希望会的小伙伴在评论区告知一下下。好了,随便下载歌曲都可以了。

结果如下:
爬取酷狗歌曲并进行下载用的是selenuim_第4张图片
爬取酷狗歌曲并进行下载用的是selenuim_第5张图片

点个赞把,亲

你可能感兴趣的:(selenuim,爬虫,笔记,python,pycharm,爬虫)