處理反爬策略是在線Python爬蟲開發中的一個重要環節。以下是一些常見的反爬策略及其應對方法:
策略:服務器通過檢查HTTP請求頭中的User-Agent
字段來識別和阻止爬蟲。
應對方法:
User-Agent
,使請求看起來像是一個正常的瀏覽器訪問。import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
# 添加更多User-Agent
]
headers = {'User-Agent': random.choice(user_agents)}
策略:服務器通過限制單個IP地址的請求頻率來阻止爬蟲。
應對方法:
import requests
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8080',
}
response = requests.get('http://example.com', headers=headers, proxies=proxies)
策略:服務器通過要求用戶輸入驗證碼來阻止自動化工具。
應對方法:
from PIL import Image
import pytesseract
def recognize_captcha(image_path):
img = Image.open(image_path)
text = pytesseract.image_to_string(img)
return text.strip()
策略:服務器通過限制請求頻率來防止爬蟲過載。
應對方法:
time.sleep()
函數控制請求頻率。import time
for url in urls:
response = requests.get(url, headers=headers)
time.sleep(1) # 暫停1秒
策略:服務器通過返回JavaScript代碼來動態加載內容,而不僅僅是HTML。
應對方法:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://example.com')
content = driver.page_source
driver.quit()
策略:服務器通過檢查Cookie和Session來識別和阻止爬蟲。
應對方法:
headers['Cookie'] = 'key=value'
策略:服務器通過在表單中添加動態生成的令牌來防止跨站請求偽造(CSRF)。
應對方法:
import re
def extract_csrf_token(html):
token_pattern = re.compile(r'name="csrf_token" value="(.*?)"')
match = token_pattern.search(html)
if match:
return match.group(1)
return None
html = requests.get('http://example.com').text
csrf_token = extract_csrf_token(html)
if csrf_token:
headers['X-CSRFToken'] = csrf_token
通過以上方法,可以有效地應對常見的反爬策略,提高爬蟲的穩定性和效率。