Skip to content

其他

初學者建議

初學者只需先熟悉requestsBeautifulSoup的使用,其他的等完全掌握基本技巧之後再慢慢研究即可。

意思是,這個網頁可以先跳過!😂

爬蟲偽裝技術與雜項整理

在爬蟲過程中,許多網站會透過 IP、User-Agent、Cookie 等方式檢測是否為機器訪問,因此需要進行偽裝,以降低被封鎖的風險。


1. Fake IP(更換 IP)

許多網站會限制同一個 IP 過於頻繁的請求,因此可以使用 代理 IP(Proxy IP) 來更換 IP 地址。

方法 1:使用免費代理 IP

import requests

proxies = {
    "http": "http://123.456.789.001:8080",
    "https": "https://123.456.789.002:8080"
}

url = "http://example.com"
response = requests.get(url, proxies=proxies)

print(response.text)

📌 代理 IP 來源

  • 免費代理(不穩定):

    • https://www.free-proxy-list.net/
    • https://www.sslproxies.org/
  • 付費代理(較穩定):

    • BrightData、SmartProxy、Oxylabs

方法 2:使用輪換 IP

可以用 proxy pool(代理池) 定期更換 IP:

import random

proxy_list = [
    "http://123.456.789.001:8080",
    "http://123.456.789.002:8080",
    "http://123.456.789.003:8080"
]

proxy = {"http": random.choice(proxy_list)}
response = requests.get("http://example.com", proxies=proxy)

方法 3:使用 Tor 網路(匿名 IP)

sudo apt install tor
proxies = {
    "http": "socks5h://127.0.0.1:9050",
    "https": "socks5h://127.0.0.1:9050"
}

response = requests.get("http://example.com", proxies=proxies)

2. Fake Browser(偽裝成瀏覽器)

大多數爬蟲會被發現是因為沒有 User-Agent,可以手動設定 User-Agent:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.110 Safari/537.36"
}

url = "http://example.com"
response = requests.get(url, headers=headers)

可以使用 不同的 User-Agent 來模擬不同瀏覽器:

  • Google Chrome
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.110 Safari/537.36"
    
  • Firefox
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0"
    
  • iPhone Safari
    "Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Mobile/15E148 Safari/604.1"
    

使用 fake_useragent 自動隨機變更

from fake_useragent import UserAgent
import requests

ua = UserAgent()
headers = {"User-Agent": ua.random}

response = requests.get("http://example.com", headers=headers)

📌 fake_useragent 需安裝:

pip install fake-useragent

3. Fake Cookies(模擬登入狀態)

許多網站需要登入才能存取數據,可以使用 requests 附帶 Cookies

cookies = {
    "sessionid": "abcd1234xyz",
    "user": "example"
}

response = requests.get("http://example.com", cookies=cookies)

可以用 開發者工具 (F12 → Network → Cookies) 找到登入後的 Cookie。


4. Fake Referer(偽裝來源)

有些網站會檢查 Referer 來防止直接訪問:

headers = {
    "Referer": "https://google.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.110 Safari/537.36"
}

response = requests.get("http://example.com", headers=headers)

5. Fake JavaScript 驗證(Selenium 方式)

有些網站使用 JavaScript 生成內容,普通爬蟲無法讀取,這時可以用 selenium

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless")  # 無頭模式
options.add_argument("user-agent=Mozilla/5.0")

driver = webdriver.Chrome(options=options)
driver.get("http://example.com")

print(driver.page_source)
driver.quit()

6. 其他爬蟲技巧

(1) 避免短時間內大量請求

import time
import random

time.sleep(random.uniform(1, 5))  # 隨機等待 1-5 秒

(2) 使用 Session 保持長時間連線

session = requests.Session()
session.headers.update({"User-Agent": "Mozilla/5.0"})

response = session.get("http://example.com")

(3) 使用 RotatingProxy 自動變換 IP

from requests_ip_rotator import ApiGateway

gateway = ApiGateway("http://example.com")
gateway.start()

session = gateway.get_session()
response = session.get("http://example.com")

gateway.shutdown()

📌 需安裝:

pip install requests-ip-rotator

7. 常見反爬機制與對應方法

反爬機制 應對方法
限制相同 IP 過多請求 使用 Proxy IP / Tor
檢查 User-Agent 模擬 User-Agent
檢查 Cookies 帶入有效 Cookies
JavaScript 驗證 使用 Selenium
Referer 限制 偽造 Referer
限制短時間內過多請求 隨機 time.sleep()

總結

偽裝方式 方法
Fake IP 使用 代理 IP (proxy)Tor
Fake Browser User-Agent 偽裝 (fake_useragent)
Fake Cookie 附加 Cookies 來模擬登入
Fake Referer 模擬來自 Google, Facebook
Fake JavaScript 使用 Selenium 來模擬瀏覽器執行 JS
其他技巧 Session時間間隔Rotating Proxy