
- Python 網路爬蟲教程
- Python 網路爬蟲 - 首頁
- 介紹
- Python 入門
- Python 網路爬蟲模組
- 網路爬蟲的合法性
- 資料提取
- 資料處理
- 處理影像和影片
- 文字處理
- 抓取動態網站
- 抓取基於表單的網站
- 處理驗證碼
- 使用爬蟲進行測試
- Python 網路爬蟲資源
- Python 網路爬蟲 - 快速指南
- Python 網路爬蟲 - 資源
- Python 網路爬蟲 - 討論
Python 網路爬蟲 - 基於表單的網站
在上一章中,我們學習了抓取動態網站。本章讓我們瞭解如何抓取基於使用者輸入的網站,也就是基於表單的網站。
介紹
如今,全球資訊網 (WWW) 正朝著社交媒體和使用者生成內容的方向發展。所以問題來了,我們如何訪問登入螢幕之外的資訊呢?為此,我們需要處理表單和登入。
在之前的章節中,我們使用 HTTP GET 方法請求資訊,但在本章中,我們將使用 HTTP POST 方法將資訊推送到 Web 伺服器進行儲存和分析。
與登入表單互動
在使用網際網路的過程中,您一定多次與登入表單互動過。它們可能非常簡單,只包含很少的 HTML 欄位、一個提交按鈕和一個操作頁面;也可能很複雜,包含一些額外的欄位,例如電子郵件、留言以及出於安全原因的驗證碼。
在本節中,我們將使用 Python 的 requests 庫來處理一個簡單的提交表單。
首先,我們需要匯入 requests 庫,如下所示:
import requests
現在,我們需要為登入表單的欄位提供資訊。
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
在下一行程式碼中,我們需要提供表單操作將要發生的 URL。
r = requests.post(“enter the URL”, data = parameters) print(r.text)
執行指令碼後,它將返回操作發生頁面上的內容。
假設您想向表單提交任何影像,使用 requests.post() 也很容易。您可以透過以下 Python 指令碼瞭解它:
import requests file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)} r = requests.post(“enter the URL”, files = file) print(r.text)
從 Web 伺服器載入 Cookie
Cookie,有時也稱為 Web Cookie 或 Internet Cookie,是由網站傳送的一小段資料,我們的計算機將其儲存在我們 Web 瀏覽器內的檔案中。
在處理登入表單的上下文中,Cookie 可以分為兩種型別。一種是我們在上節中處理過的,它允許我們向網站提交資訊;另一種允許我們在訪問網站期間始終保持“登入”狀態。對於第二種型別的表單,網站使用 Cookie 來跟蹤誰已登入,誰未登入。
Cookie 的作用是什麼?
如今,大多數網站都使用 Cookie 進行跟蹤。我們可以透過以下步驟瞭解 Cookie 的工作原理:
步驟 1 - 首先,網站將驗證我們的登入憑據並將其儲存在我們的瀏覽器 Cookie 中。此 Cookie 通常包含伺服器生成的令牌、超時和跟蹤資訊。
步驟 2 - 接下來,網站將使用 Cookie 作為身份驗證的證明。每次訪問網站時,都會顯示此身份驗證。
Cookie 對 Web 爬蟲來說非常棘手,因為如果 Web 爬蟲不跟蹤 Cookie,提交的表單將被送回,並且在下一頁上,它似乎從未登入過。使用 Python 的 requests 庫很容易跟蹤 Cookie,如下所示:
import requests parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’} r = requests.post(“enter the URL”, data = parameters)
在上面的程式碼行中,URL 將是充當登入表單處理程式的頁面。
print(‘The cookie is:’) print(r.cookies.get_dict()) print(r.text)
執行上述指令碼後,我們將從上次請求的結果中檢索 Cookie。
Cookie 還有一個問題,就是有時網站會在沒有任何警告的情況下頻繁修改 Cookie。可以使用 requests.Session() 來處理這種情況,如下所示:
import requests session = requests.Session() parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’} r = session.post(“enter the URL”, data = parameters)
在上面的程式碼行中,URL 將是充當登入表單處理程式的頁面。
print(‘The cookie is:’) print(r.cookies.get_dict()) print(r.text)
請注意,您可以輕鬆理解使用會話和不使用會話的指令碼之間的區別。
使用 Python 自動化表單
在本節中,我們將介紹一個名為 Mechanize 的 Python 模組,它將減少我們的工作量並自動化填寫表單的過程。
Mechanize 模組
Mechanize 模組為我們提供了一個高階介面來與表單互動。在開始使用它之前,我們需要使用以下命令安裝它:
pip install mechanize
請注意,它僅適用於 Python 2.x。
示例
在此示例中,我們將自動化填寫一個包含兩個欄位(電子郵件和密碼)的登入表單的過程:
import mechanize brwsr = mechanize.Browser() brwsr.open(Enter the URL of login) brwsr.select_form(nr = 0) brwsr['email'] = ‘Enter email’ brwsr['password'] = ‘Enter password’ response = brwsr.submit() brwsr.submit()
上面的程式碼很容易理解。首先,我們匯入了 mechanize 模組。然後建立了一個 Mechanize 瀏覽器物件。然後,我們導航到登入 URL 並選擇表單。之後,名稱和值直接傳遞給瀏覽器物件。