如何爬取動態網頁的數據?Python實戰案例

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

一、什麼是動態網頁

所謂的動態網頁,是指跟靜態網頁相對的一種網頁編程技術。靜態網頁,隨着html代碼的生成,頁面的內容和顯示效果就基本上不會發生變化了——除非你修改頁面代碼。而動態網頁則不然,頁面代碼雖然沒有變,但是顯示的內容卻是可以隨着時間、環境或者數據庫操作的結果而發生改變的。——來源百度百科

動態網頁具有減少工作量、內容更新快、可完成功能多等特點,被很多公司所採用,比如狗東、某寶、某瓣、某乎等等。

二、什麼是AJAX

隨着人們對動態網頁加載速度的要求越來越高,AJAX技術應運而生併成爲許多站點的首選。AJAX是一種用於創建快速動態網頁的技術,通過在後臺與服務器進行少量數據交換,使網頁實現異步更新。這意味着在不重新加載整個網頁的情況下,可以對網頁的某部分進行更新。

三、如何爬取AJAX動態加載網頁

1. 解析接口

只要是有數據發送過來,那肯定是有發送到服務器的請求的吧。我們只需找出它悄悄加載出的頁面的真實請求即可。特點:爬取速度快,爬取的數據乾淨,有些網站解析難度較大。

在這裏插入圖片描述

2. Selenium

selenium是什麼呢?它本來是個自動化測試工具,但是被廣泛的用戶拿去爬蟲了。它是一個工具,這個工具可以用代碼操作瀏覽器,比如控制瀏覽器的下滑、模擬鼠標點擊等。特點:代碼較簡單,爬取速度慢,容易被封ip。

項目實操

法院歷年公示的開庭信息、執行信息等。
長這樣:
在這裏插入圖片描述
然後,成功提取了第一頁
緊接着,加了個for循環,想着花個幾分鐘時間把此網站2164頁共計32457條開庭公告數據提取到excel裏。
然後,也就沒有然後了。各位看了前面的理論部分應該也知道了,這是 AJAX動態加載的網頁。無論你怎麼點擊下一頁,url是不會變化的。你不信我點給你看看,左上角的url像山一樣矗立在那:在這裏插入圖片描述

一、解析接口

既然如此,那我們就開啓爬蟲的正確姿勢吧,先用解析接口的方法來寫爬蟲。

首先,找到真實請求。右鍵檢查,點擊Network,選中XHR,刷新網頁,選擇Name列表中的jsp文件。沒錯,就這麼簡單,真實請求就藏在裏面。
在這裏插入圖片描述
我們再仔細看看這個jsp,這簡直是個寶啊。有真實請求url,有請求方法post,有Headers,還有Form Data,而From Data表示給url傳遞的參數,通過改變參數,咱們就可以獲得數據!
在這裏插入圖片描述
我們再仔細看看這些參數,pagesnum參數不就是代表頁數嘛!我們嘗試點擊翻頁,發現只有pagesnum參數會變化。
在這裏插入圖片描述
既然發現了它,那就趕緊抓住它。
在這裏插入圖片描述
構造真實請求,添加Headers。
在這裏插入圖片描述
構建get_page函數,自變量爲page,也就是頁數。以字典類型創建表單data,用post方式去請求網頁數據。這裏要注意要對返回的數據解碼,編碼爲’gbk’,否則返回的數據會亂碼!另外我還加了異常處理優化了下,以防意外發生。
在這裏插入圖片描述
構建parse_page函數,對返回的網頁數據進行解析,用Xpath提取所有字段內容,保存爲csv格式。
在這裏插入圖片描述
最後,遍歷一下頁數,調用一下函數。OK,搞定!
在這裏插入圖片描述
我們來看一下最終效果:
在這裏插入圖片描述
總結一下,對於AJAX動態加載網頁爬蟲,一般就兩種方式:解析接口;Selenium。推薦解析接口的方式,如果解析的是json數據,就更好爬了。實在沒轍了再用Selenium吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章