在Python中,構建一個代理IP池可以幫助你在進行網絡爬蟲時避免被目標網站封禁。以下是一個簡單的示例,展示了如何使用免費和付費的代理IP服務來構建一個代理IP池。
獲取免費代理IP列表:
你可以從一些免費的代理IP提供商獲取代理IP列表。例如,httpbin.org 提供了一個簡單的API來獲取代理IP。
編寫代碼獲取代理IP:
以下是一個使用 requests 庫從 httpbin.org 獲取代理IP的示例:
import requests
def get_free_proxies():
url = "https://httpbin.org/ip"
response = requests.get(url)
if response.status_code == 200:
proxies = response.json()['origin']
return proxies
else:
return []
free_proxies = get_free_proxies()
print(free_proxies)
使用代理IP進行爬蟲請求: 你可以在爬蟲請求中使用這些代理IP:
import requests
def fetch_url(url, proxy):
proxies = {
'http': proxy,
'https': proxy
}
try:
response = requests.get(url, proxies=proxies, timeout=5)
response.raise_for_status()
return response.text
except requests.RequestException as e:
print(f"Error fetching {url}: {e}")
return None
proxy = free_proxies[0] # 使用第一個代理IP
url = "https://example.com"
content = fetch_url(url, proxy)
if content:
print(content)
選擇付費代理IP服務:
你可以選擇一些付費的代理IP服務,例如 ScraperAPI、ProxyMesh 等。這些服務通常提供高可用性和更穩定的連接。
注冊并獲取API密鑰: 注冊并登錄代理IP服務提供商的網站,獲取你的API密鑰。
編寫代碼使用代理IP:
以下是一個使用 ScraperAPI 的示例:
import requests
API_KEY = 'your_api_key'
URL = 'https://api.scraperapi.com/v1.0/proxy'
def get_proxy():
params = {
'api_key': API_KEY,
'http_method': 'GET'
}
response = requests.get(URL, params=params)
if response.status_code == 200:
proxy = response.json()['proxy']
return proxy
else:
return None
proxy = get_proxy()
if proxy:
print(f"Using proxy: {proxy}")
else:
print("Failed to get proxy")
url = "https://example.com"
response = requests.get(url, proxies={"http": proxy, "https": proxy})
if response.status_code == 200:
print(response.text)
else:
print(f"Error fetching {url}: {response.status_code}")
你可以將獲取到的代理IP存儲在一個列表或數據庫中,并在爬蟲請求中隨機選擇一個代理IP。這樣可以提高爬蟲的可用性和穩定性。
import random
proxies = get_free_proxies() # 或者從付費服務獲取
proxy_pool = random.sample(proxies, min(len(proxies), 10)) # 選擇10個代理IP
for proxy in proxy_pool:
url = "https://example.com"
content = fetch_url(url, proxy)
if content:
print(content)
通過這種方式,你可以構建一個可用的代理IP池,并在爬蟲請求中使用這些代理IP來避免被目標網站封禁。