はじめに
onion service内のコンテンツに対してスクレイピングを行うためにTor経由でクロールを行った.
しかしscrapyではTorプロキシはサポートされていないため,今回はミドルウェアとしてPrivoxyを使用した.
また,クロール中にIPアドレスを変更したかったためscrapy-tor-proxy-rotationも使用した.
実行環境
Ubuntu 22.04 LTS
使用したツール
- Scrapy (ver 2.11.2)
- Tor (ver 0.4.6.10)
- Privoxy (ver 3.0.33)
- scrapy-tor-proxy-rotation (ver 0.0.4)
インストール
$ pip install scrapy
$ sudo apt-get install tor
$ sudo apt install privoxy
$ pip install scrapy-tor-proxy-rotation
Torの設定
一旦 Tor を停止させる
$ sudo service tor stop
そしたら /etc/tor/torrc
を開き,以下の行を追加する
ControlPort 9051
CookieAuthentication 0
最後に Tor を起動させる
$ sudo service tor start
Privoxyの設定
一旦 Privoxy を停止させる
$ sudo service privoxy stop
そしたら /etc/privoxy/config
を開き,以下の行を追加する
forward-socks5t / 127.0.0.1:9050
最後に Privoxy を起動させる
$ sudo service privoxy start
Scrapyの構築
クローラーを作成したいディレクトリ内で以下のスクリプトを実行する("プロジェクト名"
の部分は任意の文字列を入力)
$ scrapy startproject "プロジェクト名"
そしたら "プロジェクト名"/"プロジェクト名"/settings.py
を開き,以下の行を追加する
DOWNLOADER_MIDDLEWARES = {
...,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'tor_ip_rotator.middlewares.TorProxyMiddleware': 100
}
TOR_IPROTATOR_ENABLED = True
TOR_IPROTATOR_CHANGE_AFTER = 5 #IPアドレスを変更する頻度
後は通常通り scrapy を構築すればよい
参考