如果您已經使用 Python 了一段時間,特別是在資料抓取的特定情況下,您可能遇到過在嘗試檢索資料時被阻止的情況。想。在這種情況下,了解如何使用代理是一項方便的技能。
在本文中,我們將探討什麼是代理、它們為何有用,以及如何透過 Python 中的函式庫請求來使用它們。
讓我們從頭開始定義什麼是代理。
您可以將代理伺服器視為電腦與網際網路之間的「中間人」。當您向網站發送請求時,該請求首先透過代理伺服器。然後,代理商將您的請求轉發到網站,接收回應並將其發送回給您。此過程會封鎖您的 IP 位址,使請求看起來像是來自代理伺服器而不是您自己的裝置。
可以理解,這有很多後果和用途。例如,它可以用來繞過一些討厭的 IP 限制,或保持匿名。
那麼,為什麼代理程式在抓取資料時可能會有所幫助?嗯,我們之前已經給了理由。例如,您可以使用它們來繞過某些限制。
因此,在網頁抓取的特定情況下,它們可能會很有用,原因如下:
requests 函式庫是在 Python 中發出 HTTP 請求的熱門選擇,並且將代理合併到您的請求中非常簡單。
讓我們看看如何!
首先要做的事情是:在實際使用代理之前,您必須獲得有效的代理。為此,您有兩種選擇:
現在您已經有了代理列表,您可以開始使用它們了。例如,您可以像這樣建立字典:
proxies = { 'http': 'http://proxy_ip:proxy_port', 'https': 'https://proxy_ip:proxy_port', }
現在您可以使用代理程式發出請求:
import requests proxies = { 'http': 'http://your_proxy_ip:proxy_port', 'https': 'https://your_proxy_ip:proxy_port', } response = requests.get('https://httpbin.org/ip', proxies=proxies)
要查看請求的結果,您可以列印回應:
print(response.status_code) # Should return 200 if successful print(response.text) # Prints the content of the response
請注意,如果一切順利,回應應該顯示代理伺服器的 IP 位址,而不是您的。
如果您的代理需要身份驗證,您可以透過多種方式處理。
方法 1:在代理 URL 中包含憑證
要包含使用者名稱和密碼來管理代理程式中的身份驗證,您可以這樣做:
proxies = { 'http': 'http://username:password@proxy_ip:proxy_port', 'https': 'https://username:password@proxy_ip:proxy_port', }
方法2:使用HTTPProxyAuth
或者,您可以使用 HTTPProxyAuth 類別來處理驗證,如下所示:
from requests.auth import HTTPProxyAuth proxies = { 'http': 'http://proxy_ip:proxy_port', 'https': 'https://proxy_ip:proxy_port', } auth = HTTPProxyAuth('username', 'password') response = requests.get('https://httpbin.org/ip', proxies=proxies, auth=auth)
如果您發出大量請求,使用單一代理程式可能還不夠。在這種情況下,您可以使用輪換代理:這會定期或根據請求更改代理 IP 位址。
如果您想測試此解決方案,您有兩個選擇:使用清單手動輪換代理或使用代理輪換服務。
讓我們來看看這兩種方法吧!
如果您有代理列表,您可以手動輪換它們,如下所示:
import random proxies_list = [ 'http://proxy1_ip:port', 'http://proxy2_ip:port', 'http://proxy3_ip:port', # Add more proxies as needed ] def get_random_proxy(): proxy = random.choice(proxies_list) return { 'http': proxy, 'https': proxy, } for i in range(10): proxy = get_random_proxy() response = requests.get('https://httpbin.org/ip', proxies=proxy) print(response.text)
ScraperAPI 等服務可以為您處理代理程式輪替。您通常只需要更新他們提供的代理 URL 並管理 URL 字典,如下所示:
proxies = { 'http': 'http://your_service_proxy_url', 'https': 'https://your_service_proxy_url', } response = requests.get('https://httpbin.org/ip', proxies=proxies)
在 Python 中使用代理程式對於網頁抓取、測試和存取地理限制內容來說是一項很有價值的技術。如我們所見,使用庫請求將代理程式整合到 HTTP 請求中非常簡單。
從網路上抓取資料時的一些技巧:
編碼愉快!
以上是如何在 Python 中使用代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!