(python解析js)selenium結合phantomjs抓取js生成的頁面
阿新 • • 發佈:2019-01-09
,有些網頁是在載入時動態建立HTML內容,只要在js程式碼完全執行完後才會顯示最終結果。如果用傳統的方法抓取頁面,就只能獲得js程式碼執行之前頁面上的內容。
要解決這個問題有兩種方法:
1.直接從js程式碼中抓取資料(執行js程式碼,解析js變數)。
2.用第三方庫執行js,抓取執行後的最終html頁面。
在python中使用selenium執行js
selenium是一個強大的網路資料採集工具,其最初是為網站自動化測試而開發的。selenium可以讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截圖,或判斷網站上某些動作是否發生。
selenium自己不帶瀏覽器,它需要與第三方瀏覽器結合一起使用。這裡使用phantomjs的工具代替真實的瀏覽器。
PhantomJS 是一個基於 WebKit 的伺服器端 JavaScript API。它全面支援web而不需瀏覽器支援,其快速,原生支援各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。 PhantomJS 可以用於 頁面自動化 , 網路監測 , 網頁截圖 ,以及 無介面測試 等。
把selenium和phantomjs結合在一起,就可以執行一個非常強大的爬蟲了,可以處理cookie,js,header,以及任何需要你做的事。
安裝:
selenium有python庫,可以用pip等安裝;phantomjs是一個功能完善的“無頭“瀏覽器,並非一個python庫,所以它不需要想python的其他庫一樣安裝,也不能用pip安裝。
sudo pip install selenium
http://npm.taobao.org/dist/phantomjs/
#下載安裝包(sudo apt-get install phantomjs安裝的不是最新的,發現不能用)
phantomjs-2.1.1-linux-i686.tar.bz2
tar -jxvf phantomjs-2.1.1-linux-i686.tar.bz2
使用:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='/opt/phantomjs-2.1.1-linux-i686/bin/phantomjs' )
#executable_path為你的phantomjs可執行檔案路徑
driver.get("http://news.sohu.com/scroll/")
#或得js變數的值
r = driver.execute_script("return newsJason")
print r
#selenium在webdriver的DOM中使用選擇器來查詢元素,名字直接了當,by物件可使用的選擇策略有:id,class_name,css_selector,link_text,name,tag_name,tag_name,xpath等等
print driver.find_element_by_tag_name("div").text
print driver.find_element_by_csss_selector("#content").text
print driver.find_element_by_id("content").text