Python3.x:Selenium+PhantomJS爬取帶Ajax、Js的網頁及獲取JS返回值
前言
現在很多網站的都大量使用JavaScript,或者使用了Ajax技術。這樣在網頁載入完成後,url雖然不改變但是網頁的DOM元素內容卻可以動態的變化。如果處理這種網頁是還用requests庫或者python自帶的urllib庫那麼得到的網頁內容和網頁在瀏覽器中顯示的內容是不一致的。
解決方案
使用Selenium+PhantomJS。這兩個組合在一起,可以執行非常強大的爬蟲,可以處理cookie,JavaScript,header以及其他你想做的任何事情。
安裝第三方庫
Selenium是一個強大的網路資料採集工具,最初是為網站自動化測試開發的,其有對應的Python庫;
Selenium安裝命令:
pip install selenium
安裝PhantomJS
PhantomJS是一個基於webkit核心的無頭瀏覽器,即沒有UI介面,即它就是一個瀏覽器,只是其內的點選、翻頁等人為相關操作需要程式設計實現。透過編寫js程式可以直接與webkit核心互動,在此之上可以結合java語言等,透過java呼叫js等相關操作。需要去官網下載對應平臺的壓縮檔案;
PhantomJS(phantomjs-2.1.1-windows)下載地址:http://phantomjs.org/download.html,按照不同的系統選擇相應的版本
對windows系統來說,下載PhantomJs 然後將 解壓後的執行檔案放在被設定過環境變數的地方,不設定的話,後續程式碼就要設, 所以這裡直接放進來方便;
然後檢測下,在cmd視窗輸入phantomjs:
出現這樣的畫面,即表示成功;
對Mac系統來說,下載後儲存到一個路徑中,可以直接儲存在環境變了路徑中,也可以在環境變數路徑中建立一個指向phantomjs的軟連線
ln -s /usr/local/opt/my/phantomjs-2.1.1-macosx/bin/phantomjs /usr/local/bin
測試程式碼:
from selenium import webdriver driver = webdriver.PhantomJS() driver.get('http://www.baidu.com/') print (driver.page_source)
能成功獲取到頁面元素即為安裝成功
示例一:
Selenium+PhantomJS示例程式碼:
from selenium import webdriver driver = webdriver.PhantomJS() driver.get('http://www.cnblogs.com/feng0815/p/8735491.html') #獲取網頁原始碼 data = driver.page_source print(data) #獲取元素的html原始碼 tableData = driver.find_elements_by_tag_name('tableData').get_attribute('innerHTML') #獲取元素的id值 tableI = driver.find_elements_by_tag_name('tableData').get_attribute('id') #獲取元素的文字內容 tableI = driver.find_elements_by_tag_name('tableData').text driver.quit()
能輸出網頁原始碼,說明安裝成功
獲取JS返回值