第四章:動態網頁抓取 (解析真實地址 + selenium)
由於網易雲跟帖停止服務,現在已經在此處中更新了新寫的第四章。請參照文章:
前面爬取的網頁均為靜態網頁,這樣的網頁在瀏覽器中展示的內容都在 HTML 源代碼中。但是,由於主流網站都使用JavaScript 展現網頁內容, 和靜態網頁不同的是,在使用JavaScript 時,很多內容並不會出現在 HTML 源代碼中,所以爬取靜態網頁的技術可能無法正常使用。因此,我們 需要用到動態網頁抓取的兩種技術:通過瀏覽器審查元素解析真實網頁地址 和使用 selenium 模擬瀏覽器的方法。
本章首先介紹動態網頁的實例,讓讀者了解什麼是動態抓取,然後使用上述兩種動態網頁抓取技術獲取動態網頁的數據。
4.1 動態抓取的例子
在爬取動態網頁中,我們還需要了解一種非同步更新的技術 -- AJAX,即「Asynchronous Javascript And XML」(非同步JavaScript和XML)。它的價值在於,通過在後台與伺服器進行少量數據交換,就可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。一方面減少了網頁重複內容的下載,另一方面也節省了流量,因此,AJAX 得到了廣泛使用。
相對使用AJAX的網頁而言,傳統的網頁如果需要更新內容,必須重載整個網頁頁面。因此,AJAX使得互聯網應用程序更小、更快,更友好。但是,它的爬蟲的過程將變得比較麻煩。
首先,讓我們來看看動態網頁的例子。我們可以打開我博客的Hello World http://www.santostang.com/2017/03/02/hello-world/。
如下圖所示,頁面下面的評論就是用JavaScript載入的,這些評論數據不會出現在網頁源代碼中。
為了驗證其用 JavaScript 載入的,我們可以查看此網頁的網頁源代碼。如下如所示,放置該評論的代碼,裡面並沒有評論數據,只有一段JavaScript代碼。最後呈現出來的數據就是通過JavaScript提取數據載入到源代碼進行呈現的。
除了我的博客,我們還可以在天貓電商上找到AJAX技術的例子。例如,我們打開天貓的iPhone7的產品頁面,並點擊「累計評價」,我們可以發現上面的url地址沒有任何改變,並沒有重新載入整個網頁,對網頁的評論部分進行更新。
和剛剛一樣,我們也可以查看此商品網頁的源代碼,如下如所示,裡面並沒有用戶評論,這一塊內容是空白的。
因此,我們如果使用 AJAX 載入的動態網頁,怎麼爬取裡面動態載入的內容呢?有兩種方法:
1. 通過瀏覽器審查元素解析地址
2. 通過selenium模擬瀏覽器抓取
第四章其他章節請查看
4.2 解析真實地址抓取
4.3 通過selenium 模擬瀏覽器抓取
推薦閱讀:
※汽車之家字體反爬破解實踐
※爬取張佳瑋138萬知乎關注者:數據可視化
※python爬蟲之圖片下載APP1.0
※Python3如何將圖片保存到本地?