Torをダウンロードする
以下のURLからWindows Expert Bundleをダウンロードします。
The Tor Project | Privacy & Freedom Online
Defend yourself against tracking and surveillance. Circumvent censorship.
ソースをダウンロードできたら、tor-win32-0.4.5.8\Tor\tor.exeがあるか確認します。
確認出来たらこれをコマンドプロンプトから起動します。
$ cd tor-win32-0.4.5.8\Tor\tor.exe
Torのサーバーが立ち上がってログに「Establishing a Tor circuit」とメッセージが出ていれば起動成功です。
n 14 19:35:57.000 [notice] Bootstrapped 50% (loading_descriptors): Loading relay descriptors Jun 14 19:35:59.000 [notice] The current consensus contains exit nodes. Tor can build exit and internal paths. Jun 14 19:36:00.000 [notice] Bootstrapped 56% (loading_descriptors): Loading relay descriptors Jun 14 19:36:00.000 [notice] Bootstrapped 64% (loading_descriptors): Loading relay descriptors Jun 14 19:36:01.000 [notice] Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits Jun 14 19:36:01.000 [notice] Bootstrapped 80% (ap_conn): Connecting to a relay to build circuits Jun 14 19:36:02.000 [notice] Bootstrapped 85% (ap_conn_done): Connected to a relay to build circuits Jun 14 19:36:02.000 [notice] Bootstrapped 89% (ap_handshake): Finishing handshake with a relay to build circuits Jun 14 19:36:03.000 [notice] Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits Jun 14 19:36:03.000 [notice] Bootstrapped 95% (circuit_create): Establishing a Tor circuit Jun 14 19:36:04.000 [notice] Bootstrapped 100% (done): Done
これでtorが起動できたので、requestで適当なサイトにアクセスしてアクセス情報を確認してみます。
通常通りにアクセスする
# 通常のアクセスの場合 import requests res = requests.get('https://ipinfo.io').json() print(res)
<実行結果>
{'ip': '1xx.xxx.xxx.xx', 'hostname': 'xxxxx.tokyo.ocn.ne.jp', 'city': 'Tokyo', 'region': 'Tokyo', 'country': 'JP', 'loc': ~~~~}
恐らく自分の近所の基地局の情報が表示されます。
Torを使って串を刺した状態でアクセスする
次にTorを使ってサイトにアクセスしてみます。
import requests # プロキシ設定 proxies = { 'http':'socks5://127.0.0.1:9050', 'https':'socks5://127.0.0.1:9050' } res = requests.get('https://ipinfo.io', proxies=proxies).json() print(res)
<実行結果>
{'ip': '51.210.34.150', 'hostname': 'ns3174248.ip-51-210-34.eu', 'city': 'Conflans-Sainte-Honorine', 'region': 'Île-de-France', 'country': 'FR', 'loc': '49.0016,2.0969', 'org': 'AS16276 OVH SAS', 'postal': '78700', 'timezone': 'Europe/Paris', 'readme': 'https://ipinfo.io/missingauth'}
全く別の海外のIPアドレスが表示されていればTorを経由してアクセスできています。
subprocessでTorを再起動してIPアドレスを都度切り替える
Torを起動した状態でも一定時間でIPアドレスが切り替わりますが、都度IPアドレスを切り替えたい場合はsubprocesでTorを都度再起動すれば実現可能です。
関連記事:【Python】subprocessでPython上からコマンドを実行する
import subprocess import requests import time proxies = { 'http':'socks5://127.0.0.1:9050', 'https':'socks5://127.0.0.1:9050' } while True: cmd = r'C:\Users\81903\Desktop\Python関係\tor-win32-0.4.5.8\Tor\tor.exe' p = subprocess.Popen(cmd, shell=False) res = requests.get('https://ipinfo.io', proxies=proxies).json() print(res) p.kill() time.sleep(5)
<実行結果>
{'ip': '62.102.148.68', 'city': 'Stockholm', 'region': 'Stockholm', 'country': 'SE', 'loc': '59.3294,18.0687', 'org': 'AS51815 IP-Only Networks AB', 'postal': '100 05', 'timezone': 'Europe/Stockholm', 'readme': 'https://ipinfo.io/missingauth'} {'ip': '104.244.77.53', 'hostname': 'torproject.org', 'city': 'Luxembourg', 'region': 'Luxembourg', 'country': 'LU', 'loc': '49.6117,6.1300', 'org': 'AS53667 FranTech Solutions', 'postal': 'L-1118', 'timezone': 'Europe/Luxembourg', 'readme': 'https://ipinfo.io/missingauth'} {'ip': '109.70.100.59', 'hostname': 'tor-exit-anonymizer.appliedprivacy.net', 'city': 'Vienna', 'region': 'Vienna', 'country': 'AT', 'loc': '48.2085,16.3721', 'org': 'AS208323 Foundation for Applied Privacy', 'postal': '1010', 'timezone': 'Europe/Vienna', 'readme': 'https://ipinfo.io/missingauth'} {'ip': '198.144.121.93', 'city': 'Amsterdam', 'region': 'North Holland', 'country': 'NL', 'loc': '52.3740,4.8897', 'org': 'AS206264 Amarutu Technology Ltd', 'postal': '1012', 'timezone': 'Europe/Amsterdam', 'readme': 'https://ipinfo.io/missingauth'} {'ip': '199.249.230.186', 'hostname': 'tor97.quintex.com', 'city': 'Dallas', 'region': 'Texas', 'country': 'US', 'loc': '32.7831,-96.8067', 'org': 'AS62744 Quintex Alliance Consulting', 'postal': '75270', 'timezone': 'America/Chicago', 'readme': 'https://ipinfo.io/missingauth'} {'ip': '89.163.252.230', 'city': 'Düsseldorf', 'region': 'North Rhine-Westphalia', 'country': 'DE', 'loc': '51.2217,6.7762', 'org': 'AS24961 myLoc managed IT AG', 'postal': '40212', 'timezone': 'Europe/Berlin', 'readme': 'https://ipinfo.io/missingauth'}
アクセスごとにIP情報が切り替わっています。
これを使えばスクレイピングの同一IP対策は可能だと思いますがあくまで、方法としてあるというだけでやりすぎないように注意しましょう。。。次はSeleniumで実装する方法について紹介したいと思います。
関連記事:【Python】SeleniumでTor経由でIPを切り替えつつスクレイピングする
コメント
[…] 関連記事:【Python】WindowsでTorを使用してrequestsでスクレピングしてみた […]