【悪用厳禁】Torを使ったスクレイピングでIPアドレスを分散させるテクニック – Python

Torとは?

Tor(トーア、英語: The Onion Router)とは、TCP/IPにおける接続経路の匿名化を実現するための規格、及びそのリファレンス実装であるソフトウェアの名称である。通常、ユーザはローカルにSOCKSプロキシ (オニオンプロキシ) を立て、そのプロキシ経由で通信を行うことになる。Torという名称は、オリジナルのソフトウェア開発プロジェクトの名称である「The Onion Router」の頭文字を取ったものである。

https://ja.wikipedia.org/wiki/Tor

要約すると、Torを使うと、自分の現在使っているIP以外からWEBにアクセスすることができます。

Torで検索するとTorブラウザが出てきて、一般的にみんなが使っているのはブラウザとしてのTorの方だと思いますが、Torブラウザ自体はFierFoxブラウザをカスタムしたもので、Torの本体はSocksプロキシです。

Torを使ったWebスクレイピング

Webスクレイピングに、そのSocksプロキシを流用することで、簡単にIPアドレスを変更することが可能になります。

つまり自分のIPではないIPを使って色んなWEBサイトにBOTアクセスすることが可能になります。

Torを使ったスクレイピングはどういった場合に便利なのか?

WEBアクセスの自動化、スクレイピングやBOTアクセスというのは年々、制限が厳しくなっているサイトが増えています。

例えばブックオフオンラインというサイトで、20回ほど連続でF5ボタンを押してみてください。

ブックオフオンラインのアクセス制限

ブックオフオンラインは割と昔からですが、短期間にアクセスを集中させてしまうと上記写真のような、アクセス制限ページが表示されるようになります。

複合的な条件(クッキーなど)でアクセスを制限してくるサイトなどもありますが主にIPを使って制限してくることがほとんどです。

Torを使えば、そのようなアクセス制限を簡単に回避することが可能になります。

IPアドレスを変えるだけなら公開プロキシを使う手もありますが、全く安定性がないですし、都度、接続先の公開プロキシ情報を取得して差し替える必要があるのも難点です。

制限しているサイトにその制限を回避してアクセスするのは如何なものか、という意見もあるかとは思いますが、ここではあくまで技術的な話をしていきますので、倫理的な話は棚に上げておきます。

Torを準備する

Torのダウンロード

Tor公式サイトより各自OSにあったものをダウンロードしてください。

Linuxの場合ならパッケージ管理モジュールコマンドで一発でインストール可能です。

Windowsなどで公式からダウンロードしてきた場合はZipファイルの状態だと思いますので、解凍してください。

解凍後は特にインストーラなどはありませんので中に入っているtor.exeがソフトの本体となります。

Torを起動する

起動はコマンドラインで行います。

Windowsの場合はコマンドプロンプトを立ち上げてtor.exeがあるディレクトリまで移動した後、以下のコマンド。

そのままtor.exeを起動するだけですね。

Linuxでパッケージソフトで入れた場合はPathが通っていると思いますので、以下のコマンドでどこからでも起動できます。

基本的にこれだけでSocksプロキシが立ち上がり、そのプロキシ越しに接続すると、Torネットワークを使ってWebにアクセスすることができます。

特に何もいじっていないディフォルトの状態だと9050ポートがSocksのポートになります

PythonのrequestsでTor越しにWebアクセスしてみる

ここでは例としてPythonのrequestsでTorを使ってHttpリクエストを送ってみます。

以下ではAmazonのAWSを使っています。

まずはプロキシを刺さずに。

printされているのはAWSのLinuxOSからWebアクセスしたときの情報です。

次にプロキシ越しにアクセスしてみます。

requestsのgetメソッドの第二引数にproxiesプロパティを設定して先ほど格納した変数を渡しています。

しっかりIPアドレスが変わっています。Torは再起動のたびにIPアドレスが変わります。

ちなみにPythonだとsubprocessモジュールを使うと簡単にtorを再起動してIPアドレスを変更することができます。

更にIPアドレスが変更できました。

Torを使ったスクレイピングまとめ

Torを使うとプロキシを指すだけで簡単にIPアドレスを変更できます。

ちなみにブラウザ自動操作系のスクレイピングライブラリでもプロキシの設定さえすれば同じように使うことができます。Pythonで言えばseleniumのChrome操作とかですね。

試してませんが、VBAスクレイピングなんかもIEの自動操作なのでIE側にプロキシの設定さえすれば同じくTor越しにIPアドレスを変更してアクセスできると思います。

以下はPythonを使ったスクレイピングに関する記事一覧です。
Pythonはスクレイピングをするには便利なライブラリが豊富に揃っていて一度なれると他の言語で同じことするのが億劫になります。

更に踏み込んだテクニックとしてTorを複数起動させて、同時に複数のIPアドレスを使用するテクニックもあります。それはまたの機会に。