利用selinum爬取咪咕音乐歌单信息源代码分享

话不多说,直接上代码,咪咕音乐的网页相对简单比较容易爬取
这个代码只是比较粗糙的完成了爬取工作,还有很多未完善的地方,因为使用的是ChromeDriver,
我们可以直接看到浏览器操作,可以很容易查错
执行此代码前请保证已经安装了下列包及ChromeDriver应用程序

from selenium import  webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

browser = webdriver.Chrome()
wait=WebDriverWait(browser, 10)
#歌单标题,url及播放量信息的爬取
def search():
    try:
        browser.get('http://music.migu.cn/v3')
        #查找歌单按钮
        submit_=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#header > div.sub-nav > div > ul.sub-nav-music.active-menu > li:nth-child(3) > a')))
        submit_.click()
        #查找总页数
        total_page=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#playlist > div.page > a:nth-child(6)')))
        pages=int(total_page.text)
        print("歌单共有{}页".format(pages))
        for i in range(1, total_page+1):
            print("这是第{}页".format(i))
            #确定该元素是否加载成功
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#playlist > div.song-list-cont > ul ')))
            #获取网页源代码
            data=browser.page_source
            bs = BeautifulSoup(data, 'lxml')
            #
            ba = bs.select('.thumb')
            print("这页有{}个歌单".format(len(ba)))
            for li in range(len(ba)):
                #获取歌单标题
                title = ba[li].find('div',class_='song-list-name').find('a').get('title')
                #获取歌单播放量
                bf=ba[li].find('div',class_='desc-text creatorName').text.strip()
                print(title,bf)
            browser.implicitly_wait(10)
            try:
                #实现翻页操作
                next_page=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#playlist > div.page > a.page-c.iconfont.cf-next-page')))   #这里没有去判断高亮处,因此使用了try,到时候再输出时能看到报错
                next_page.click()
            except:
                print("获取url失败,可能已经到最后一页")

    except  TimeoutException:
         print("爬取数据失败")

if __name__ == '__main__':
    search()

你可能感兴趣的:(知识点梳理)