標籤:
噹噹當~第三篇部落格開始啦~
這次的話題是資料抓取。終於到了核心部分的探討,我的心情也是非常激動啊!如果大家baidu或者google(如果可以的話)資料抓取或者data crawling,將會找到數以千計的例子。但是大多數的代碼非常的冗長,並且許多代碼還是抓取待用資料之後,對動態JS寫成的資料卻毫無辦法。或者,利用HTML解析網址後,再找到JS寫的資料頁面來尋找到所想要的資料。
但是!不知各位是否有發現過,如果開啟chrome或者safari或者各種瀏覽器的審查元素。網頁上能看到的資料,其實都會載到裡面。可當轉移到原始碼的時候,JS寫成的資料卻都消失了!可我們為什麼要從原始碼中找資料,卻不直接從審查元素中找呢?帶著這個問題,我曆經千險,穿越了各種國外的社區論壇以及外掛程式包,終於找到了答案。
首先介紹今天的主角!
- interpreter:Selenium
- app:PhantomJS
既然是interpreter,Selenium是可以按照我第一篇部落格的做法下載的。PhantomJS呢,可以直接通過我給的連結裡面進行下載。當兩個都安裝完畢,就能正式地開始進行資料抓取了。當然例子就是我的部落格啦~
首先上範例代碼!
#-*-coding:utf-8-*-#from selenium import webdriverdef crawling_webdriver(): #get local session of PhantomJS driver = webdriver.PhantomJS(executable_path=‘/Users/Yirugao/phantomjs/bin/phantomjs‘, port=65000) driver.set_window_size(1024, 768) #optional driver.get("http://www.cnblogs.com/Jerrold-Gao/") # Load page #start crawling data data=driver.find_element_by_id("sidebar_scorerank").text#print to check my result print(data)#quit the driver driver.quit()if __name__ == ‘__main__‘: crawling_webdriver()
是否有被python精簡的語言驚歎到呢?這就是python外掛程式功能包的強大之處。
我需要提醒幾個注意點:一、PhantomJS的路徑和連接埠是一定要尋找的。在國內某篇文章中不知為何去掉了路徑和連接埠,神奇的是,居然程式還能運行。我試了幾回,都無法像它一樣運行。二、請務必在最後quit driver,不然對記憶體的佔用是會越來越大的。
這樣的代碼就可以對本頁面的資料進行抓取了,結果是:
可是,如果是想抓取超級連結呢?通過以上的代碼,依樣畫葫蘆,仍然是找不出來的。這裡有個簡單的技巧:
#crawling a link data=driver.find_element_by_id("homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0") url=data.get_attribute("href")
將id屬下的區塊,提取出href的部分,就能找到連結了。這裡找到的是:
=================================這裡是另起主題的分割線===================================
關於Selenium,無論是國內還是國外,都算火過一陣子了。比起openpyxl,它在首頁上的注釋也清晰很多。這裡介紹幾個我覺得比較好用的資源。
由於它官網莫名掉線,所以首當其衝的資源就是python-Selenium站了,上面有很多對代碼的註解,十分實用。
其次,對國內的同學來說,最好的網站便是中文站了,雖然人數不是很多,但是討論還是挺豐富的。
最後,便是萬能的stackoverflow啦,國內上這個站速度總是有點慢,其實還是很怨念的。
=================================我是來返場的分割線======================================
本日吐槽:有次和友人逛博物館。朋友說,博物館其實好奸詐,一大面雪白的牆掛一幅畫,你看到畫後也不會立刻有比較對象,就會覺得“這好有藝術感啊”的奇妙感覺。我回答說,就和西歐的料理一樣嘛,一個大白盤擺一小疊食物,感覺就會很精緻的。朋友深表贊同地說,對啊,這麼大的留白,擺什麼都好看。我低頭輕輕笑了一下,說,什麼時候把My Code也掛上去。
在家隨便做的法式甜酒鴨胸肉(Magret de Canard)
利用Selenium製作python資料抓取,以及對Selenium資源介紹