引入
今日概要
- 圖片懶加載
- selenium
- phantomJs
- 谷歌無頭瀏覽器
知識點回顧
- 驗證碼處理流程
今日詳情
動態數據加載處理
一.圖片懶加載
- 什么是圖片懶加載?
- 案例分析:抓取站長素材http://sc.chinaz.com/中的圖片數據
-
- 運行結果觀察發現,我們可以獲取圖片的名稱,但是鏈接獲取的為空,檢查后發現xpath表達式也沒有問題,究其原因出在了哪里呢?
-
圖片懶加載概念:
-
圖片懶加載是一種網頁優化技術。圖片作為一種網絡資源,在被請求時也與普通靜態資源一樣,將占用網絡資源,而一次性將整個頁面的所有圖片加載完,將大大增加頁面的首屏加載時間。為了解決這種問題,通過前后端配合,使圖片僅在瀏覽器當前視窗內出現時才加載該圖片,達到減少首屏圖片請求數的技術就被稱為“圖片懶加載”。
-
-
網站一般如何實現圖片懶加載技術呢?
-
在網頁源碼中,在img標簽中首先會使用一個“偽屬性”(通常使用src2,original......)去存放真正的圖片鏈接而並非是直接存放在src屬性中。當圖片出現到頁面的可視化區域中,會動態將偽屬性替換成src屬性,完成圖片的加載。
-
-
站長素材案例后續分析:通過細致觀察頁面的結構后發現,網頁中圖片的鏈接是存儲在了src2這個偽屬性中
- 案例分析:抓取站長素材http://sc.chinaz.com/中的圖片數據
簡介
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器
環境安裝
- 下載安裝selenium:pip install selenium
- 下載瀏覽器驅動程序:
- http://chromedriver.storage.googleapis.com/index.html
- 查看驅動和瀏覽器版本的映射關系:
- http://blog.csdn.net/huilan_same/article/details/51896672
簡單使用/效果展示
瀏覽器創建
Selenium支持非常多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機端的瀏覽器。另外,也支持無界面瀏覽器PhantomJS。
元素定位
webdriver 提供了一系列的元素定位方法,常用的有以下幾種:
注意
1、find_element_by_xxx找的是第一個符合條件的標簽,find_elements_by_xxx找的是所有符合條件的標簽。
2、根據ID、CSS選擇器和XPath獲取,它們返回的結果完全一致。
3、另外,Selenium還提供了通用方法find_element()
,它需要傳入兩個參數:查找方式By
和值。實際上,它就是find_element_by_id()
這種方法的通用函數版本,比如find_element_by_id(id)
就等價於find_element(By.ID, id)
,二者得到的結果完全一致。
節點交互
Selenium可以驅動瀏覽器來執行一些操作,也就是說可以讓瀏覽器模擬執行一些動作。比較常見的用法有:輸入文字時用send_keys()
方法,清空文字時用clear()
方法,點擊按鈕時用click()
方法。示例如下:
動作鏈
在上面的實例中,一些交互動作都是針對某個節點執行的。比如,對於輸入框,我們就調用它的輸入文字和清空文字方法;對於按鈕,就調用它的點擊方法。其實,還有另外一些操作,它們沒有特定的執行對象,比如鼠標拖曳、鍵盤按鍵等,這些動作用另一種方式來執行,那就是動作鏈。
比如,現在實現一個節點的拖曳操作,將某個節點從一處拖曳到另外一處,可以這樣實現:
執行JavaScript
對於某些操作,Selenium API並沒有提供。比如,下拉進度條,它可以直接模擬運行JavaScript,此時使用execute_script()
方法即可實現,代碼如下:
獲取頁面源碼數據
通過page_source
屬性可以獲取網頁的源代碼,接着就可以使用解析庫(如正則表達式、Beautiful Soup、pyquery等)來提取信息了。
前進和后退
Cookie處理
使用Selenium,還可以方便地對Cookies進行操作,例如獲取、添加、刪除Cookies等。示例如下:
異常處理
phantomJS
PhantomJS是一款無界面的瀏覽器,其自動化操作流程和上述操作谷歌瀏覽器是一致的。由於是無界面的,為了能夠展示自動化操作流程,PhantomJS為用戶提供了一個截屏的功能,使用save_screenshot函數實現。
谷歌無頭瀏覽器
由於PhantomJs最近已經停止了更新和維護,所以推薦大家可以使用谷歌的無頭瀏覽器,是一款無界面的谷歌瀏覽器。
登錄qq空間,爬取數據
盡可能多的爬取豆瓣網中的電影信息
selenium規避被檢測識別
現在不少大網站有對selenium采取了監測機制。比如正常情況下我們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值為
undefined。而使用selenium訪問則該值為true。那么如何解決這個問題呢?
只需要設置Chromedriver的啟動參數即可解決問題。在啟動Chromedriver之前,為Chrome開啟實驗性功能參數excludeSwitches
,它的值為['enable-automation']
,完整代碼如下:
作業
- 爬取網易新聞國內板塊下的新聞標題和新聞內容