python爬蟲學習(一)分析ajax請求
Introducation
原文地址: http://www.findspace.name/easycoding/1627
Python爬蟲學習目錄
本文先從分析網頁開始,了解要乾的目標是什麼。
以 https://www.gebiz.gov.sg/ 網站為例,使用chrome的開發者工具。chrome開發者工具
F12打開chrome的開發者工具,我們關心的主要有這樣幾個列目:
- Elements: 允許我們從瀏覽器的角度看頁面,也就是說我們可以看到chrome渲染頁面所需要的的HTML、CSS和DOM(Document Object Model)對象。此外,還可以編輯這些內容更改頁面顯示效果;
- Network: 可以看到頁面向伺服器請求了哪些資源、資源的大小以及載入資源花費的時間,當然也能看到哪些資源不能成功載入。此外,還可以查看HTTP的請求頭,返回內容等;
- Resources: 對本地緩存(IndexedDB、Web SQL、Cookie、應用程序緩存、Web Storage)中的數據進行確認及編輯;
比如要抓取Opportunities,在點擊opportunities之後,跳轉到了一個詳細的列表頁面,期間,network自動更新,中間訪問的頁面包括js,css等等都列表在這裡。
如果network標籤頁下面的欄目沒有Method一列,則在Name上右鍵,把method勾中即可。可以看到每個元素都列出了get或者post方式。而從Type一列可以看到請求到的文件類型,是script腳本、stylesheet css樣式表還是document頁面主文件等等。查看post請求
要了解http的get和post請求,請參看文章
簡易HttpServer(500行左右代碼)在opportunities頁面,network下可以看到主頁面的文件BOListing.xhtml。點擊下一頁以後,瀏覽器地址欄的網址並沒有變,判定是javascript非同步載入的網頁,應該是ajax。
AJAX 是 Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)的縮寫。AJAX 通過使用原有的 web 標準組件,實現了在不重新載入整個頁面的情況下,與伺服器進行數據交互。例如在新浪微博中,你可以展開一條微博的評論,而不需要重新載入,或者打開一個新的頁面。但是這些內容並不是一開始就在頁面中的(這樣頁面就太大了),而是在你點擊的時候被載入進來的。這就導致了你抓取這個頁面的時候,並不能獲得這些評論信息(因為你沒有『展開』)。
AJAX 的一種常見用法是使用 AJAX 載入 JSON 數據,然後在瀏覽器端渲染。如果能直接抓取到 JSON 數據,會比 HTML 更容易解析。
AJAX 實際上也是通過 HTTP 傳輸數據的
找到真實的請求
AJAX 一般是通過 XMLHttpRequest 對象介面發送請求的,XMLHttpRequest 一般被縮寫為 XHR。點擊網路面板上漏斗形的過濾按鈕,過濾出 XHR 請求。挨個查看每個請求,通過訪問路徑和預覽,找到包含信息的請求
Reference
pyspider:AJAX 和 HTTP
推薦閱讀: