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 並選擇表單。之後,名稱和值直接傳遞給瀏覽器物件。

廣告