手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(1):網(wǎng)易云音樂(lè)歌單
大家好,《手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)》連載開(kāi)始了!在筆者的職業(yè)生涯中,幾乎沒(méi)有發(fā)現(xiàn)像網(wǎng)絡(luò)爬蟲(chóng)這樣的編程實(shí)踐,可以同時(shí)吸引程序員和門(mén)外漢的注意。本文由淺入深的把爬蟲(chóng)技術(shù)和盤(pán)托出,為初學(xué)者提供一種輕松的入門(mén)方式。請(qǐng)跟隨我們一起踏上爬蟲(chóng)學(xué)習(xí)的打怪升級(jí)之路吧!
介紹
什么是爬蟲(chóng)?
先看看百度百科的定義:
把這段代碼保存為get_html.py,然后運(yùn)行,看看輸出了什么:
定位到的html代碼:
有了這些信息,就可以用BeautifulSoup提取數(shù)據(jù)了。升級(jí)一下代碼:
把這段代碼保存為get_data.py,然后運(yùn)行,看看輸出了什么:
沒(méi)錯(cuò),得到了我們想要的數(shù)據(jù)!
BeautifulSoup提供一些簡(jiǎn)單的、Python式的函數(shù)用來(lái)處理導(dǎo)航、搜索、修改分析樹(shù)等功能。它是一個(gè)工具箱,通過(guò)解析文檔為用戶提供需要抓取的數(shù)據(jù),因?yàn)楹?jiǎn)單,所以不需要多少代碼就可以寫(xiě)出一個(gè)完整的應(yīng)用程序。怎么樣,是不是覺(jué)得只要復(fù)制粘貼就可以寫(xiě)爬蟲(chóng)了?簡(jiǎn)單的爬蟲(chóng)確實(shí)是可以的!
一個(gè)迷你爬蟲(chóng)
我們先定一個(gè)小目標(biāo):爬取網(wǎng)易云音樂(lè)播放數(shù)大于500萬(wàn)的歌單。
打開(kāi)歌單的url: http://music.163.com/#/discover/playlist,然后用BeautifulSoup提取播放數(shù)<span class=”nb”>3715</span>。結(jié)果表明,我們什么也沒(méi)提取到。難道我們打開(kāi)了一個(gè)假的網(wǎng)頁(yè)?
Selenium:是一個(gè)強(qiáng)大的網(wǎng)絡(luò)數(shù)據(jù)采集工具,其最初是為網(wǎng)站自動(dòng)化測(cè)試而開(kāi)發(fā)的。近幾年,它還被廣泛用于獲取精確的網(wǎng)站快照,因?yàn)樗鼈兛梢灾苯舆\(yùn)行在瀏覽器上。Selenium 庫(kù)是一個(gè)在WebDriver 上調(diào)用的API。WebDriver 有點(diǎn)兒像可以加載網(wǎng)站的瀏覽器,但是它也可以像BeautifulSoup對(duì)象一樣用來(lái)查找頁(yè)面元素,與頁(yè)面上的元素進(jìn)行交互(發(fā)送文本、點(diǎn)擊等),以及執(zhí)行其他動(dòng)作來(lái)運(yùn)行網(wǎng)絡(luò)爬蟲(chóng)。安裝方式與其他Python第三方庫(kù)一樣。
- $pip install Selenium
驗(yàn)證一下:
Selenium 自己不帶瀏覽器,它需要與第三方瀏覽器結(jié)合在一起使用。例如,如果你在Firefox 上運(yùn)行Selenium,可以直接看到一個(gè)Firefox 窗口被打開(kāi),進(jìn)入網(wǎng)站,然后執(zhí)行你在代碼中設(shè)置的動(dòng)作。雖然這樣可以看得更清楚,但不適用于我們的爬蟲(chóng)程序,爬一頁(yè)就打開(kāi)一頁(yè)效率太低,所以我們用一個(gè)叫PhantomJS的工具代替真實(shí)的瀏覽器。
PhantomJS:是一個(gè)“無(wú)頭”(headless)瀏覽器。它會(huì)把網(wǎng)站加載到內(nèi)存并執(zhí)行頁(yè)面上的JavaScript,但是它不會(huì)向用戶展示網(wǎng)頁(yè)的圖形界面。把Selenium和PhantomJS 結(jié)合在一起,就可以運(yùn)行一個(gè)非常強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)了,可以處理cookie、JavaScript、header,以及任何你需要做的事情。
PhantomJS并不是Python的第三方庫(kù),不能用pip安裝。它是一個(gè)完善的瀏覽器,所以你需要去它的官方網(wǎng)站下載,然后把可執(zhí)行文件拷貝到Python安裝目錄的Scripts文件夾,像這樣:
開(kāi)始干活!
打開(kāi)歌單的***頁(yè):
http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0
用Chrome的“開(kāi)發(fā)者工具”F12先分析一下,很容易就看穿了一切。
播放數(shù)nb (number broadcast):29915
封面 msk (mask):有標(biāo)題和url
同理,可以找到“下一頁(yè)”的url,***一頁(yè)的url是“javascript:void(0)”。
***,用18行代碼即可完成我們的工作。
把這段代碼保存為get_data.py,然后運(yùn)行。運(yùn)行結(jié)束后,在程序的目錄里生成了一個(gè)playlist.csv文件。
看到成果后是不是很有成就感?如果你感興趣,還可以按照這個(gè)思路,找找評(píng)論數(shù)最多的單曲,再也不用擔(dān)心沒(méi)歌聽(tīng)了!
今天的內(nèi)容比較淺顯,希望對(duì)你有用。就先介紹到這里,我們下期再見(jiàn)!
原文鏈接:http://www.cnblogs.com/tuohai666/p/8718107.html