在本篇文章中,我們將深入探討如何在 Python 中使用 Tor 代理來進行多 IP 測試,特別是與 Selenium 結合使用的方式。這是進行網頁爬蟲或自動化測試時的一個重要技巧,可以有效避免 IP 被封鎖的問題。本文將提供完整的教學流程、實作範例、錯誤排除以及延伸應用,確保你能夠輕鬆上手。
## 1. 下載 Tor
首先,我們需要下載並安裝 Tor。你可以從官方網站獲取最新版本:[Tor Project 下載頁面](https://www.torproject.org/download/tor/)
### Linux 安裝
若你使用 Linux,可以透過 Homebrew 安裝 Tor,執行以下指令:
“`bash
brew install tor
“`
## 2. 更改 torrc 參數
### Windows
在 Windows 上,第一次執行 `tor.exe` 後,系統會自動生成設定檔,路徑如下:
“`
C:\Users\
“`
### Linux
在 Linux 上,打開 Tor 的設定檔:
“`bash
nano /usr/local/etc/tor/torrc
“`
然後儲存以下設定:
“`plaintext
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
“`
## 3. 啟動 Tor
### Windows
執行 `tor.exe` 來啟動 Tor 服務。
### Linux
在 Linux 上,執行以下指令來啟動 Tor:
“`bash
tor
“`
## 4. 設置 Tor 密碼
為了增強安全性,我們需要設置 Tor 控制端口的密碼。執行以下指令:
“`bash
tor –hash-password “password”
“`
這將產生一個哈希值,記下來並修改以下檔案:
– Windows: `C:\Users\
– Linux: `/usr/local/etc/tor/torrc`
在檔案中添加以下內容:
“`plaintext
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
“`
完整的 `torrc` 設置如下:
“`plaintext
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
“`
## 5. 使用 Selenium 與 Tor 代理
確保 Tor 已經啟動後,我們可以使用以下 Python 程式碼來每 3 秒更換一次 IP:
“`python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from stem import Signal
from stem.control import Controller
import time
import random
def renew_tor_ip():
with Controller.from_port(port=9051) as controller:
controller.authenticate(password=’password’) # 用你的 Tor 控制端口密碼替換 ‘password’
controller.signal(Signal.NEWNYM)
time.sleep(5) # 等待 Tor 生成新的路由
def setup_chrome_with_tor():
socks_port = random.choice([‘9000’, ‘9001’, ‘9002’, ‘9003’, ‘9004’]) # 隨機選擇一個 SocksPort
chrome_options = Options()
# chrome_options.add_argument(‘–headless’) # 若需要無頭模式,請取消註解
chrome_options.add_argument(‘–proxy-server=socks5://127.0.0.1:’ + socks_port) # 配置 Chrome 使用 Tor 代理
# 使用 ChromeDriverManager 自動管理 ChromeDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
return driver
while True:
# 使用這個函數來啟動瀏覽器並通過 Tor 訪問網站
driver = setup_chrome_with_tor()
driver.get(‘http://icanhazip.com’)
print(driver.page_source) # 打印當前 IP 地址
driver.quit()
# 更換 Tor 路由來獲得新的 IP 地址
renew_tor_ip()
time.sleep(3)
“`
### 錯誤排除
1. **Tor 未啟動**:確保 Tor 服務正在運行。
2. **代理設置錯誤**:檢查所使用的 SocksPort 是否正確。
3. **網路連接問題**:確保你的網路連接正常。
## 延伸應用
利用 Tor 代理技術,你可以進行更廣泛的網頁爬蟲任務,特別是需要隱藏真實 IP 或者需要高頻率請求的情況。請遵守網站的使用條款,避免對伺服器造成負擔。
如需進一步了解 Python 相關技術,建議參考 [Vocus 教學文](https://vocus.cc/)。
## Q&A(常見問題解答)
**Q1: 可以使用其他代理服務器嗎?**
A1: 是的,你可以使用其他代理服務器,但需確保它們支持 SOCKS5 協議。
**Q2: 為什麼我需要更換 IP?**
A2: 更換 IP 可以幫助避免被網站封鎖,特別是在進行大量請求時。
**Q3: Tor 會影響我的網速嗎?**
A3: 是的,使用 Tor 可能會導致網速變慢,因為它經過多個中繼節點。
—