Python スクレイピング

【Python】WindowsでTorを使用してrequestsでスクレピングしてみた

この記事は約9分で読めます。

 

 

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を切り替えつつスクレイピングする

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:【Python】WindowsでTorを使用してrequestsでスクレピングしてみた […]

タイトルとURLをコピーしました