[ Tor ] 使用 Tor進行網路爬蟲

其實透過 Tor爬蟲好像不會比較快,但省下很多驗證或被警告的麻煩,不過這樣真的很不乖,好孩子別學。

socks模塊為 Python提供了一個標準的類似 socket的接口,用於通過 SOCKS代理進行連接。
$ pip install pysocks
請求是一個使用 Python編寫的 HTTP庫,它是包裝在 urllib上。
$ pip install requests
MacOS可以直接用 Homebrew安裝。
安裝 Tor和啟動 Tor。(不是 Tor Browser)
$ brew install tor
$ tor  # 啟動
$
$ sudo apt-get install tor # Ubuntu可以用 apt-get安裝,安裝後會自動啟動,每次啟動電腦都將自動開啟 tor。
$ sudo update-rc.d -f tor disable  # 如果不希望 tor自動啟動可以輸入該指令。電腦重啟後,tor將不再自動啟動。
$ tor  # 關閉自動啟動後,可使用與 MacOS一樣的方式啟動。

如果是其他系統的話安裝起來比較麻煩,可以參考 Tor官網中的 Expert guides

開啟另一個 Terminal進入 python shell。
>>> import socks
>>> import socket
>>> socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5, addr="127.0.0.1", port=9050)
>>> socket.socket = socks.socksocket
>>>
>>> import requests
>>> print(requests.get("http://icanhazip.com").text)
163.172.142.15
3, 4是在設定程式默認的訪問通道,將其設定為 Tor提供的通道,其中 Tor默認的通道是 9050。
把 1-4的程式碼寫在程式的最前面,程式應該就可以透過 Tor訪問網際網路了。
用一般的瀏覽器開啟 http://icanhazip.com,Terminal輸出的 IP與真實的 IP應該是不同的。

Tor更新 IP位置的頻率是每 20分鐘一次,用於爬蟲,頻率可能太低。
手動更新 IP位置,需要再開啟另一個 Terminal輸入。
$ killall -HUP tor
$
$ sudo killall -HUP tor  # Ubuntu需要加上 sudo
再回剛的 Terminal,一邊用剛的指令更新,另一邊 print IP位置,就可以發現 IP有在更新。

或設定一個固定或隨機的頻率執行下列程式碼更新 IP
>>> import os
>>> os.system("killall -HUP tor")
>>>
>>> os.system("sudo killall -HUP tor")  # Ubuntu需要加上 sudo

如果 Tor當掉,或什麼不明原因無法關閉,可以透過輸入以下代碼強制關閉。
$ killall tor
$
$ sudo killall tor  # Ubuntu需要加上 sudo

本文參考 Anonymous Web Scraping using Python and TorHow to request new TOR identity in terminalstop/restart tor

留言