【Tor】9050ポートを利用。IPアドレスを隠してPythonスクレイピング


TL;DR

今までTorを使うときはブラウザだけで使っていたのですが、Pythonでスクレイピングする際にもTorが使えたらいいなーと思い立ち、やってみたら若干ハマった(かつ、忘れそうかもと思った)のでメモ

環境

  • macOS
  • Python 3.7.5
  • Homebrew 2.2.1

やろうとしたこと

9050ポートを通すことで、IPアドレスを変更してwebページにアクセスする、みたいなことをやりたい(参考:こちらの記事など)

※以下、Pythonを実行できる環境は自分で用意できるものと思って進めます。わからない場合、ターミナルでさっくり実行できるiPythonとかがオススメです。ググってね。

では行きます。

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

↑まずは写経しましょう(参考:上で紹介した記事)

res = requests.get('http://httpbin.org/ip').json()
print(res)

↑普通にやると普通に自分のIPアドレスが返ってくる(ここまでは順調)

ハマったこと

res = requests.get('http://httpbin.org/ip',proxies=proxies).json()
print(res)

↑プロキシ刺すと、「ほーら、ipアドレスが変わってるでしょ!」って感じらしいんですが、

僕の場合はごっついエラーが出ます↓

ConnectionError: SOCKSHTTPSConnectionPool(host='ipinfo.io', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.contrib.socks.SOCKSHTTPSConnection object at
0x10d57fe10>: Failed to establish a new connection: [Errno 61] Connection refused'))

これ、ポートが開いてないよってことらしい。
ので、ポートを開放します。

解決!!

brew install tor

↑それは、そう。

brew services start tor

↑これが一番大事

同じことをやってみる。

res = requests.get('http://httpbin.org/ip',proxies=proxies).json()
print(res)
>> {'origin': '46.165.245.154, 46.165.245.154'}

おお!!でけた!!

ちなみにtorを止めたい時は

brew services stop tor

これですね。めでたしーー

結局なんだったんですかね

ここまでの流れ、常識なんですかね、

sudo service tor start

とかでtorを起動してください。とかでさらっと終わってること多いのですが、
僕のMacOSは、これをやっても、serviceコマンドが見つかりませんの一点張りでした。serviceコマンド、いつどういう環境で使えるものなのか、いまだにわかってない 頑張って理解したい。

今は、
ExcludeExitNodes等のtorrcファイルの設定など、ブラウザでやってるレベルのセットアップに挑戦しているので
ガンガンTor開拓の記事を書いていきたい。(書くとは言ってない)

参考記事

Torを使って個人情報をコントロールする方法
【悪用厳禁】Torを使ったスクレイピングでIPアドレスを分散させるテクニック – Python