MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. 【悪用厳禁】Torを使ったスクレイピングでIPアドレスを分散させるテクニック – Python

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

2023 2/02
Python
2019-03-312023-02-02
Torを使ったスクレイピングでIPアドレスを分散させるテクニック
目次

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プロキシです。

__追記__
PythonでTorを扱いやすくするモジュールを作成しました。ソースコードはnoteで公開していて、機能は以下の記事で紹介しています。
興味がある方は覗いてみてください。

あわせて読みたい
Torをスクレイピングで使いやすくするPythonのモジュール作ってみた TorをPythonスクレイピングに流用しやすくするためのモジュールを作成しました。Torをスクレイピングに流用することによって、IPによる制限を回避することが容易になります。

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

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

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

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

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

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

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

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

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

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

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

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

Torを準備する

Torのダウンロード

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

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

sudo yum install tor

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

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

Torを起動する

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

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

tor

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

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

sudo service tor start

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

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

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

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

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

import requests

proxies = {
        'http':'socks5://127.0.0.1:9050',
        'https':'socks5://127.0.0.1:9050'
        }

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

res = requests.get('https://ipinfo.io').json()
print(res)

>>>{'ip': '13.58.36.108', 'hostname': 'ec2-13-58-36-108.us-east-2.compute.amazonaws.com', 'city': 'Ashley', 'region': 'Ohio', 'country': 'US', 'loc': '40.4089,-82.9555', 'postal': '43003', 'phone': '740', 'org': 'AS16509 Amazon.com, Inc.'}

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

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

res = requests.get('https://ipinfo.io', proxies=proxies).json()
print(res)

>>>{'ip': '109.70.100.22', 'hostname': '22.0-25.100.70.109.in-addr.arpa', 'city': 'Vienna', 'region': 'Vienna', 'country': 'AT', 'loc': '48.2402,16.3773', 'postal': '1200', 'org': 'AS1764 Next Layer Telekommunikationsdienstleistungs- und Beratungs GmbH'}

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

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

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

import subprocess

args = ['sudo', 'service', 'tor','restart']
subprocess.call(args)

res = requests.get('https://ipinfo.io',proxies=proxies).json()
print(res)

>>>{'ip': '185.220.101.35', 'city': 'Berlin', 'region': 'Berlin', 'country': 'DE', 'loc': '52.4947,13.2852', 'postal': '14193', 'org': 'AS200052 Joshua Peter McQuistan'}

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

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

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

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

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

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

Let's Hack Tech
スクレイピング | Let's Hack Tech

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

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド
created by Rinker
技術評論社
¥3,900 (2025/05/11 18:59:39時点 Amazon調べ-詳細)
  • Kindle
  • Amazon
  • 楽天市場
  • Yahooショッピング
Python
Python requests Tor スクレイピング プロキシ
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (2件)

  • tt より:
    2019-08-10 14:32

    同時に複数のIPアドレスを使用する方法を知りたいのですが、ご教授願えないでしょうか?

    返信
    • katsuwo より:
      2019-08-12 11:49

      Torは起動したプロセス毎にIPが変わるので、複数同時に立ち上げて各ポートの経由で接続すれば、それぞれのIPで接続できるようになりますよ!
      スレッドの並列化などもこの方法で対応できます。

      返信

tt へ返信する コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • 正規表現処理の濁点でハマった話2024-12-12
  • 保護中: 疾風v2更新履歴2024-05-31
  • 【自営・経営者向け・税金も】クレジットカードガチ勢による最強クレカ解説2023-10-23
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
目次
目次