前言
現在很多網站的都大量使用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返回值