就是有一天我和队友rushB的时候,哎,就发现队友的MVP音乐针不戳。于是,我就让队友多放几次听一听。然而…
敌人:GTMD电竞梦
好吧,并不是队友不想给我听动感的MVP音乐,而是实力不允许(找个班上吧)
我就在网上找CSGO音乐盒的试听网站,一下就让我找到了CSGO官方网站 音乐盒试听。但是,我想把音乐文件保存到本地,就可以在本地听,也可以发给别人。我找啊找啊,找到了这个CSGO音乐盒曲目打包下载试听,还是缺了几个最新的音乐盒。
于是,回到CSGO官方网站 音乐盒试听,然后F12
有了资源链接,就轮到爬虫登场了。
注意到音乐盒试听页面是需要点击试听
按钮才弹出的,并且点击前后,页面链接没有发生变化,所以不能用?music=xxx
的形式获取试听页面。这个时候就需要用到selenium库来模拟用户行为。
selenium:Selenium框架测试直接运行在浏览器中,就像真正的用户在操作一样
pip install selenium
Selenium调用浏览器必须有一个webdriver驱动文件
Chrome驱动文件下载:http://npm.taobao.org/mirrors/chromedriver/
Firefox驱动文件下载:https://github.com/mozilla/geckodriver/releases
驱动文件解压后,放到文件夹下,如:
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将驱动文件所在文件夹路径添加到Path的值中。
如:
具体过程不写了,总之就是使用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))
结果:
最喜欢的音乐盒:
EZ4ENCE
很遗憾,csdn不能嵌入iframe