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