python網絡數據採集-穿越網頁表單進行採集

一. 基本信息  

  如何獲取登錄窗口背後的信息,我們目前示例中的網絡爬蟲與大多數網站服務器進行數據交互時,都是用HTTP協議的GET方法去請求信息,這邊我們將使用POST方法,把信息推送給網絡服務器進行存儲和分析。

  頁面表單基本上就可以看成是一種用戶提交POST請求的方式,且這種請求方式是服務器能夠理解和使用的。就像網站的URL鏈接可以幫助用戶發送GET請求一樣,HTML表單可以幫助用戶發出POST請求。當然,我們也可以使用一點代碼來創建這些請求,然後通過網絡爬蟲把它們提交給服務器。

  Requests庫就是這樣一個擅長處理那些複雜HTTP請求、cookie、header(響應頭和請求頭)等內容的Python第三方庫。

二.實現表單提交

  大多數網頁表單都是由一些HTML字段、一個提交按鈕、一個在表單處理完之後跳轉的“執行結果”(表單action的值)頁面構成,雖然這些HTML字段通常由文字內容構成,但是也可以實現文件上傳或其他非文字內容。

  因爲大多數主流網站都會在它們的robots.txt文件裏註明禁止爬蟲接入登錄表單,所以爲了安全起見,pythonscraping網站裏放入了一個一組不同類型的表單和登錄內容,這樣可以進行爬蟲採集了,最簡單的表單位於http://pythonscraping.com/pages/files/form.html,表單內容如下:

<h2>Tell me your name!</h2>
<form method="post" action="processing.php">
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname"><br>
<input type="submit" value="Submit" id="submit">
</form>
  需要注意一下,首先,兩個輸入字段firstname和lastname,這一點非常重要,字段的名稱決定了表單被確認後要傳送到服務器上的變量名稱。如果你想要模擬表單提交數據的行爲,你就需要保證那你的變量名稱與字段名稱是一一對應的。

   還需要注意表單的真實行爲其實是發生在processing.php(絕度路徑是http://pythonscraping.com/pages/files/processing.php)。表單任何POST請求都發生在這個頁面上,並非表單本身所在的頁面。切記:HTML表單的目的,只是幫助網站的訪問者發送格式合理的請求,向服務器請求沒有出現的頁面。除非你要對請求的設計樣式進行研究,否則不需要花太多時間在表單所在的頁面上。

   用Requests庫提交表單,只用四行代碼就可以實現,包括導入庫文件和打印內容的語句:

import requests
params={'firstname':'Peter','lastname':'Wang'}
r=requests.request('POST',"http://pythonscraping.com/pages/files/processing.php",data=params)
print(r.text)

表單提交之後,程序返回執行頁面的源代碼,包括這行內容:


此處,需要注意的是,腳本取名字不能叫request.py,不能與庫同名,否者會一直報錯,報找不到模塊。

發佈了105 篇原創文章 · 獲贊 238 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章