注意
この記事はTorを用いたスクレイピングを推奨するものではありません。
スクレイピングは基本的に問題ありませんが、対象のサイトの利用規約で禁止されていたり、対象のサイトのサーバーに過度な負荷をかけた場合、罪に問われる可能性があります。
Torとは
接続経路を匿名化する技術です。理論上、Torを使用してアクセスした場合、誰がアクセスしたか特定することは困難です。
実行環境
Homebrew 2.2.4
pip 20.0.2
Python 3.7.3
1. IPアドレスを取得
最初に、Torなしの状態でグローバルIPアドレスを確認しましょう。
グローバルIPアドレスはここ、Torを使用しているかどうかはここからHTMLを取得することで確認できます。
Beautiful Soupを使用するので、インストールしてください。
# pipでbeautifulsoup4をインストール
$ pip install beautifulsoup4
# 確認
$ pip list | grep beautifulsoup4
beautifulsoup4 4.7.1
import urllib.request, urllib.error
from bs4 import BeautifulSoup
# URLからHTMLを返す
def fetch_html(url):
res = urllib.request.urlopen(url)
return BeautifulSoup(res, 'html.parser')
# 現在のグローバルIPアドレスを返す
def get_ip_addr():
html = fetch_html('http://checkip.dyndns.com/')
return html.body.text.split(': ')[1]
# Torを使っているかを返す
def check_use_tor():
html = fetch_html('https://check.torproject.org/')
return html.find('h1')['class'][0] != 'off'
print('You are using tor.' if check_use_tor() else 'You are not using tor.')
print('Current IP address is ' + get_ip_addr())
実行結果
You are not using tor.
Current IP address is XXX.XXX.XX.XXX
2. Torをインストールする
MacOSを使用している場合は、Homebrewでインストールできます。
また、brew services start
を使用してデーモンとして起動させています。
$ brew install tor
$ brew services start tor
# 確認
$ tor --version
Tor version 0.4.2.6.
$ brew services list | grep tor
tor started your_name /Users/your_name/Library/LaunchAgents/homebrew.mxcl.tor.plist
Torを停止させる場合、再起動させる場合は以下のコマンドを実行してください。
$ brew services stop tor
$ brew services reload tor
また、この記事では触れませんが、設定ファイルは/usr/local/etc/tor/torrc
です。
3. Torを介してスクレイピングを行う
PySocksを使用するので、インストールしてください。
$ pip install PySocks
# 確認
$ pip list | grep PySocks
PySocks 1.7.1
Torはプロキシとしてsocks5://localhost:9050
を使用しているので、 1. のコードに以下を追加します。
import socks, socket
socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
socket.socket = socks.socksocket
実行結果
You are using tor.
Current IP address is YY.YYY.YYY.YY
表示されるグローバルIPアドレスが 1. で実行したときと異なっていることを確認してください。
Tor使用時のIPアドレスは、一定時間ごとに切り替わります。