Python爬蟲(3)百度+新浪微盤下載自己喜歡的歌曲

??本篇分享將講解如何利用Python爬蟲在百度上下載新浪微盤里自己想要的歌手的歌曲,隨便挑個(gè)你喜歡的歌手巨缘!
??首先我們先探索一下我們操作的步驟(以下載Westlife的歌曲為例):打開百度,輸入"Westlife 微盤"采呐,將彈出如下頁(yè)面:

百度Westlife

??第1若锁,2條是新浪微盤的搜索記錄,但第1條記錄中的歌曲大于1首斧吐,我們將不對(duì)其進(jìn)行下載又固,下載的網(wǎng)頁(yè)類似于一下頁(yè)面:
  
新浪微盤 一首歌

??接下來(lái)點(diǎn)擊該頁(yè)面的下載按鈕即可下載仲器,等待一會(huì)兒關(guān)閉當(dāng)前網(wǎng)頁(yè)回到原所搜頁(yè)面,再對(duì)下一條記錄進(jìn)行處理仰冠。我們寫Python爬蟲程序的爬取網(wǎng)頁(yè)的基本過程就如上所述啦乏冀。
??在上一篇分享中,我們已了解了如何運(yùn)行爬蟲程序洋只。所以這一次辆沦,直接上程序!哈哈~~

# -*- coding: utf-8 -*-
"""
Created on Mon Aug  7 09:22:12 2017
@author: JClian
"""
import os
import re
import time
import datetime 
from selenium import webdriver  #導(dǎo)入Selenium的webdriver
from selenium.webdriver.common.keys import Keys  #導(dǎo)入Keys
from selenium.webdriver.common.action_chains import ActionChains
#導(dǎo)入selenium的異常
from selenium.common.exceptions import TimeoutException,NoSuchElementException,WebDriverException

def getSong(songer):
    chrome_options = webdriver.ChromeOptions()
    # 不加載圖片(提升加載速度)木张;設(shè)置默認(rèn)保存文件路徑
    prefs = {"profile.managed_default_content_settings.images":2,\
             "download.default_directory": 'F:\\download_music\%s' %songer}
    chrome_options.add_experimental_option("prefs",prefs)
    browser = webdriver.Chrome(chrome_options=chrome_options) #啟動(dòng)瀏覽器 
    browser.maximize_window() #最大化
    #設(shè)置網(wǎng)頁(yè)加載等待時(shí)間為20s,超過20s后則停止加載
    browser.set_page_load_timeout(20) 
    try:
        browser.get('https://www.baidu.com/') #獲取百度網(wǎng)頁(yè)
    except TimeoutException:
        browser.execute_script('window.stop()')
    #在百度搜索欄搜索“歌手 微盤”众辨,并點(diǎn)擊“百度一下”按鈕
    browser.find_element_by_id("kw").send_keys('%s 微盤'% songer)
    browser.find_element_by_id("su").click()
    time.sleep(5)
    #對(duì)每一頁(yè)的搜索記錄進(jìn)行處理
    def each_page(j):
        for i in range(1+10*j,11+10*j):
            print(datetime.datetime.now(),"第%d頁(yè)~~~~~~~~~~~~~~~~~~~"%i)
            #找到該條搜索記錄,并點(diǎn)擊
            elem = browser.find_element_by_xpath("http://*[@id='%d']/h3/a"%i)
            elem.click()
            time.sleep(10)
            #切換到新彈出的窗口
            browser.switch_to_window(browser.window_handles[1])
            #判斷是否是新浪微盤網(wǎng)頁(yè)舷礼,若是鹃彻,則再判斷里面分享的歌曲是否大于一首
            if re.match('^http://vdisk.weibo.com/s',browser.current_url):
                print("這是一個(gè)新浪微盤的網(wǎng)頁(yè)!")
                t = browser.find_elements_by_class_name("short_name")
                if len(t) > 0:
                    print("歌曲大于1首妻献,不進(jìn)行下載蛛株!\n")
                else:
                    print("可以進(jìn)行下載!")
                    #統(tǒng)計(jì)此時(shí)下載文件夾中的文件數(shù)量育拨,作為下載成功的標(biāo)志
                    music_exit_flg = len(os.listdir("F:\\download_music\%s"%songer))
                    #找到該頁(yè)面的“下載”按鈕谨履,并按下
                    elem = browser.find_element_by_id("download_big_btn").click()
                    print("歌曲正在下載中...")
                    time.sleep(8)
                    #獲取歌曲的歌名信息
                    file_name = browser.find_element_by_class_name("page_down_filename").text
                    exit_flg = 0 #歌曲重新下載的標(biāo)志
                    while True:
                        #如果下載文件夾文件數(shù)量增加1,則下載成功熬丧,否則重新下載
                        if len(os.listdir("F:\\download_music\%s"%songer)) == (music_exit_flg+1):
                            print("%s 下載成功笋粟!\n"%file_name)
                            break
                        else:
                            browser.refresh() #刷新網(wǎng)頁(yè)
                            time.sleep(5)
                            music_exit_flg = len(os.listdir("F:\\download_music\%s"%songer))
                            elem = browser.find_element_by_id("download_big_btn").click()
                            print("正在嘗試重新下載...")
                            time.sleep(8)
                            exit_flg += 1
                            if exit_flg == 3: #嘗試重新下載3次仍未下載后当编,則下載失敗
                                print("%s下載失敗啦~~\n" %file_name)
                                break
                        
            else:
                print(("這不是一個(gè)新浪微盤的網(wǎng)頁(yè)法希!\n"))
            #關(guān)閉當(dāng)前窗口姐扮,并切換到原來(lái)的搜索頁(yè)面
            browser.close()
            time.sleep(2)
            browser.switch_to_window(browser.window_handles[0])
    
    pages = 20 #設(shè)置爬取網(wǎng)頁(yè)的數(shù)量為20预侯,即200條搜索記錄
    for i in range(pages):
        each_page(i)
        #點(diǎn)擊該頁(yè)面中的“下一頁(yè)”按鈕
        if i ==0:
            browser.find_element_by_class_name("n").click()
        else:
            browser.find_elements_by_class_name("n")[1].click()
        time.sleep(8)
        
    browser.close()#關(guān)閉窗口
    print(datetime.datetime.now(),"%s的歌曲已操作完畢啦!" % songer)
    
def main():
    d1 = datetime.datetime.now()
    #要搜索的歌手的列表
    songer_lst = ['Westlife', 'Backstreet Boys', 'Michael Jackson', 'Owl City', 'James Blunt', \
                  'Avril Lavigne','Tylor Swift','Beyonce', 'Groove Coverage', 'Jewel', 'Beyond']
    for songer in songer_lst: #運(yùn)行g(shù)etSong()函數(shù)播歼,并加入異常處理
        try:
            print(datetime.datetime.now(),"開始搜索%s的歌曲啦植旧!"% songer)
            os.mkdir(os.path.join("F:\\download_music",songer)) #創(chuàng)建新文件夾
            getSong(songer)
        except TimeoutException:
            print(datetime.datetime.now(),"%s的歌曲下載超時(shí)啦漠趁!嘿嘿~~"% songer)
        except NoSuchElementException:
            print(datetime.datetime.now(),"哎呦佑菩,除了點(diǎn)小問題... NoSuchElementException")
        except WebDriverException:
            print(datetime.datetime.now(),"哎呦盾沫,除了點(diǎn)小問題...WebDriverException")
    d2 = datetime.datetime.now()
    print("開始時(shí)間:",d1)
    print("結(jié)束時(shí)間:",d2)
    print("一共花費(fèi)的時(shí)間:",d2-d1)
    
main()

??筆者利用睡覺時(shí)間讓程序自己運(yùn)行(注意設(shè)置電腦不休眠),運(yùn)行結(jié)果如下(網(wǎng)速貌似有點(diǎn)不給力呢):
  

運(yùn)行結(jié)果

??再去電腦上查看下載的文件:
  
文件夾

  在進(jìn)入Westlife文件夾查看:
69個(gè)項(xiàng)目

  
Westlife歌曲下載結(jié)果(部分)

??哈哈殿漠,厲害了赴精,我的爬蟲!在網(wǎng)速不給力的情況下绞幌,程序還是跑了7個(gè)多小時(shí)蕾哟,下載了674個(gè)文件,已經(jīng)很不錯(cuò)啦,就是有部分下載文件不是歌曲罷了渐苏,但已經(jīng)符合筆者的期待了......


??筆者已將源程序放在碼云網(wǎng)站上,歡迎大家下載菇夸,測(cè)試琼富,批評(píng)指正。
??有了這個(gè)程序庄新,你就能在電腦上鞠眉,一邊看電影,一邊下載自己喜歡的歌手的歌曲啦择诈。你也可以在自己上班或不用電腦的時(shí)候下載歌曲(注意設(shè)置電腦不休眠械蹋,網(wǎng)速要好!P呱帧;└辍),回來(lái)后說不定滿滿的都是驚喜呢~~~
??期待下一篇分享~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荷科,一起剝皮案震驚了整個(gè)濱河市唯咬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畏浆,老刑警劉巖胆胰,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異刻获,居然都是意外死亡蜀涨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門蝎毡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厚柳,“玉大人,你說我怎么就攤上這事顶掉〔菽龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵痒筒,是天一觀的道長(zhǎng)宰闰。 經(jīng)常有香客問我,道長(zhǎng)簿透,這世上最難降的妖魔是什么移袍? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮老充,結(jié)果婚禮上葡盗,老公的妹妹穿的比我還像新娘。我一直安慰自己啡浊,他們只是感情好觅够,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布胶背。 她就那樣靜靜地躺著,像睡著了一般喘先。 火紅的嫁衣襯著肌膚如雪钳吟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天窘拯,我揣著相機(jī)與錄音红且,去河邊找鬼。 笑死涤姊,一個(gè)胖子當(dāng)著我的面吹牛暇番,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播思喊,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼壁酬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了搔涝?” 一聲冷哼從身側(cè)響起厨喂,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庄呈,沒想到半個(gè)月后蜕煌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诬留,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年斜纪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文兑。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盒刚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绿贞,到底是詐尸還是另有隱情因块,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布籍铁,位于F島的核電站涡上,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拒名。R本人自食惡果不足惜吩愧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望增显。 院中可真熱鬧雁佳,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至星澳,卻和暖如春秸滴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背募判。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咒唆,地道東北人届垫。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像全释,于是被迫代替她去往敵國(guó)和親装处。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1 前言 作為一名合格的數(shù)據(jù)分析師浸船,其完整的技術(shù)知識(shí)體系必須貫穿數(shù)據(jù)獲取妄迁、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)提取李命、數(shù)據(jù)分析登淘、數(shù)據(jù)挖掘、...
    whenif閱讀 18,061評(píng)論 45 523
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評(píng)論 25 707
  • 流年漫過盛夏封字, 變幻著每一個(gè)人的模樣. 瞳孔中最后的影像黔州, 是歲月更迭的滄桑. 縱然夏日喧囂著迎來(lái)盡頭, 縱然時(shí)光...
    初淚傾城閱讀 417評(píng)論 0 0
  • 文|豆子的油菜花 那個(gè)春天 下過幾場(chǎng)雨 淅淅瀝瀝 淋濕的歲月 我叫你大槐樹 還有你的木籬笆 那個(gè)冬天 飄過幾場(chǎng)雪 ...
    豆子的油菜花閱讀 430評(píng)論 0 8
  • 時(shí)間總是有意無(wú)意 拉長(zhǎng)著心和世界的焦距 閃爍于遠(yuǎn)方的模糊 晶瑩了夢(mèng)與現(xiàn)實(shí)的邊際 歲月打磨的玲瓏介質(zhì) 來(lái)自亙古的永恒...
    e2645bb26961閱讀 228評(píng)論 0 0