关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

文章目录


个人博客传送门: |我是门|

一、事情的详细经过

就是有一天我和队友rushB的时候,哎,就发现队友的MVP音乐针不戳。于是,我就让队友多放几次听一听。然而…

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

敌人:GTMD电竞梦

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

好吧,并不是队友不想给我听动感的MVP音乐,而是实力不允许(找个班上吧)

我就在网上找CSGO音乐盒的试听网站,一下就让我找到了CSGO官方网站 音乐盒试听。但是,我想把音乐文件保存到本地,就可以在本地听,也可以发给别人。我找啊找啊,找到了这个CSGO音乐盒曲目打包下载试听,还是缺了几个最新的音乐盒。

于是,回到CSGO官方网站 音乐盒试听,然后F12

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

有了资源链接,就轮到爬虫登场了。

二、selenium爬取所有资源链接并下载

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

注意到音乐盒试听页面是需要点击试听按钮才弹出的,并且点击前后,页面链接没有发生变化,所以不能用?music=xxx的形式获取试听页面。这个时候就需要用到selenium库来模拟用户行为。

selenium:Selenium框架测试直接运行在浏览器中,就像真正的用户在操作一样

导入selenium库

pip install selenium

下载浏览器驱动

Selenium调用浏览器必须有一个webdriver驱动文件

Chrome驱动文件下载:http://npm.taobao.org/mirrors/chromedriver/

Firefox驱动文件下载:https://github.com/mozilla/geckodriver/releases

驱动文件解压后,放到文件夹下,如:

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

配置环境变量

我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将驱动文件所在文件夹路径添加到Path的值中。

如:

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

爬取所有链接并下载

具体过程不写了,总之就是使用F12查看源代码,定位元素,模拟点击,爬取链接,然后用requests下载文件保存

完整代码:

from selenium import webdriver
import requests as req
import os
import time


oldtime = time.time() #开始时间

option = webdriver.ChromeOptions()
option.add_argument('--headless') #*面模式
page = webdriver.Chrome(chrome_options=option)# 创建一个webdriver对象
page.get('https://www.csgo.com.cn/data/music_box.html')

album = page.find_element_by_id('album')
dls = album.find_elements_by_tag_name('dl')
if os.path.exists('music')==False:
        os.mkdir('music')



count = 0
for i in range(len(dls)):
    count += 1
    p = dls[i].find_element_by_tag_name('p')
    p.click() #模拟点击"试听"
    time.sleep(1)
    prompt_music = page.find_element_by_id('prompt_music')
    name_ch = prompt_music.find_element_by_class_name('name_ch')
    albumName = name_ch.get_attribute('textContent')
    albumName = albumName.replace(':', '-')
    albumName = albumName.replace('*', '-')
    if os.path.exists('music\\'+albumName)==False:
        os.mkdir('music\\'+albumName)
    lis = prompt_music.find_elements_by_tag_name('li')
    print(albumName)
    print('开始下载...')

    for j in range(len(lis)):
        musicName = str(lis[j].get_attribute('textContent'))
        span = lis[j].find_element_by_tag_name('span')
        musicSrc = span.get_attribute('musicsrc')
        down = req.get(musicSrc)
        fp = open('music\\'+albumName+'\\'+musicName+'.mp3', 'wb')
        #保存MP3文件到磁盘
        for data in down.iter_content(chunk_size=1024):
            if data:
                fp.write(data)
        fp.close()

    print('...下载完成')
    close = prompt_music.find_element_by_class_name('close')
    close.click() #模拟点击"X"关闭
    time.sleep(1)



newtime = time.time()
to = newtime - oldtime
print('全部下载完成,共计%d个音乐盒,耗时%.2f秒'%(count, to))

结果:

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

三、听着音乐盒在沙二RushB

关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事

最喜欢的音乐盒:
EZ4ENCE
很遗憾,csdn不能嵌入iframe

上一篇:如何解决Python 爬取网易云评论为[ ]的问题


下一篇:Python爬虫实战教学:网易云音乐爬取你喜欢得歌曲