python爬蟲學習(一)分析ajax請求

Introducation

原文地址: findspace.name/easycodi

Python爬蟲學習目錄

本文先從分析網頁開始,了解要乾的目標是什麼。

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

推薦閱讀:

TAG:Python | 爬蟲計算機網路 | Python入門 |