[python]抓取网易云用户的听歌排行

本文使用到的工具是Selenium。简单的多Selenium就是一个web自动化测试工具,提供IDE以及插件多种方式。

本文的目标是使用Selenium抓取网易云音乐用户的所有时间的听歌排行。
[python]抓取网易云用户的听歌排行_第1张图片
下面结合代码解释:

from selenium import webdriver
import selenium.webdriver.support.ui as ui

# 存储为文本
def write2txt(data,path):
    file = open(path,"w")
    file.write(data)
    file.close()


driver = webdriver.Chrome(executable_path='./drv/chromedriver')#chrome浏览器的驱动,下载链接:https://chromedriver.storage.googleapis.com/2.31/chromedriver_linux64.zip

driver.get("http://music.163.com/#/user/songs/rank?id=39686047")#需要抓取的用户链接,这里注意的是这里的id不是用户的id,而是用户听歌形成的所有时间排行的排行版的id

driver.switch_to.frame('g_iframe')  # 从windows切换到frame,切换到歌曲列表所在的frame

data=''#用来保存数据
try:
    wait = ui.WebDriverWait(driver, 15)
    #找到歌曲列表所在的父标签
    if wait.until(lambda driver: driver.find_element_by_class_name('g-bd')):
        print('success!')
        data+=driver.find_element_by_id('rHeader').find_element_by_tag_name('h4').text+'\n'
        print(data)#抓取用户听了多少首歌
        lists = driver.find_element_by_class_name('m-record').find_elements_by_tag_name('li')
        print(len(lists))#网易只给出了前100首听的最频繁的歌
        for l in lists:
            temp='歌曲名:'+l.find_element_by_tag_name('b').text+' 歌手:'+l.find_element_by_class_name('s-fc8').text.replace('-','')+' 频率:'+l.find_element_by_class_name('bg').get_attribute('style')
            print(temp)#解析出歌名 歌手 频率
            data+=temp+'\n'

finally:
    driver.quit()
write2txt(data,'./data/songs.txt')#保存文件中

执行完毕可以看到songs.txt文件的生成。

这里给出结果示例作为参考:

累积听歌4157首
歌曲名:为你我受冷风吹 歌手:林忆莲 频率:width: 100%;
歌曲名:演员 歌手:薛之谦 频率:width: 91%;
歌曲名:悟空 歌手:戴荃 频率:width: 78%;
歌曲名:一生中最爱 (Live) - live 歌手:陈奕迅 频率:width: 73%;
歌曲名:好久不见 歌手:陈奕迅 频率:width: 70%;
歌曲名:女儿情 歌手:万晓利 频率:width: 70%;
歌曲名:山丘 歌手:李宗盛 频率:width: 62%;
歌曲名:离人 歌手:张学友 频率:width: 60%;
歌曲名:董小姐 歌手:宋冬野 频率:width: 60%;
歌曲名:藏起来 歌手:倪安东 频率:width: 59%;
歌曲名:活着 歌手:郝云 频率:width: 57%;
歌曲名:Break Again(Original Mix) 歌手:Jack Howes 频率:width: 55%;
歌曲名:她说 歌手:林俊杰 频率:width: 55%;
歌曲名:天后 歌手:陈势安 频率:width: 55%;
歌曲名:追梦赤子心 歌手:GALA 频率:width: 55%;
歌曲名:红玫瑰(国) 歌手:陈奕迅 频率:width: 55%;
歌曲名:爱的勇气 歌手:曲婉婷 频率:width: 55%;
....

你可能感兴趣的:(Python)