其他
初學者建議
初學者只需先熟悉requests
跟BeautifulSoup
的使用,其他的等完全掌握基本技巧之後再慢慢研究即可。
意思是,這個網頁可以先跳過!😂
爬蟲偽裝技術與雜項整理
在爬蟲過程中,許多網站會透過 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)
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
- Firefox
- iPhone Safari
使用 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
需安裝:
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) 避免短時間內大量請求
(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()
📌 需安裝:
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 |