日々変化するWebページを保存(魚拓)したいことって結構あると思います。自分もそうで、ちょくちょく変化するWebページを毎日保存して、変化を抽出しようと思い。
昔、PHPでスクレイピングした時にやったことはあるのですが、今回は気軽にPDFやpngなども保存したいなと。
最初はpuppeteerでやる方法(vanilla-clipper)かな、とやってみましたが自分の能力が低くて
ArchiveBoxが定期実行によさげな感じだったので、インストールから実行してみるところまでを書きます。ArchiveBoxもpythonからchrome呼んでるわけですが。
1.必要な環境
公式ページのインストールページを見てみます。
必要な環境は下記です。
- python 3.5以上
- wget 1.16以上
- chromium かgoogle-chrome 59以上、今なら80以上なので問題なし
- youtube-dl
- curl
- git
2. インストールする
自分が使っているさくらVPS kusanagi環境(centos7)でも、Dockerでも使えます。
2.1 Docker環境
Docker、Docker-compose環境でも使えます。すごく良い記事があるので貼り付け。
とりあえずarchiveboxだけ使ってみるなら、archivebox,nginxだけdocker-compose.ymlに記載すればOK。自分はWindows10 pro 64bitにDockerをhyper-Vで使っています。
Dockerお手軽。

2.2 さくらVPS Kusanagi(Centos7)環境でArchiveBoxに必要な環境を整える
自分のプランは2Gプランですが、プラン関係なく使えると思います。
python3, youtube-dl, chromeが必要です。
2.2.1 python3を入れる
kusanagiのpythonは2.7なのでpython3.6を入れます。下記URL参考に。

# IUSレポジトリ追加 yum -y install https://centos7.iuscommunity.org/ius-release.rpm #python確認 python3, python3.4, 3.5, 3.6が出てきた yum --enablerepo=ius search python3 #python3.6 インストール yum --enablerepo=ius install -y python36u python36u-libs python36u-devel python36u-pip python36u-setuptools python36u-tools # リンク追加 ln -s /bin/python3.6 python3 ln -s /bin/pyvenv-3.6 pyvenv #確認 python3 -V
2.2.2 youtube-dlを入れる
archiveboxではyoutube-dlが必要なのでこれを入れる
sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl
2.2.3 chromeを入れる
chromeを入れます。レポジトリ追加してインストール。
sudo vim /etc/yum.repos.d/google-chrome.repo [google-chrome] baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch enabled=1 gpgcheck=1 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo yum install google-chrome-stable sudo yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts google-chrome --version
2.3 ArchiveBoxを入れる(gitから)
動く環境が整ったので、ArchiveBoxを入れます。 Quickstartにあるように、git cloneするだけです。事前にkusanagi provisionで –lampでもなんでもいいので作成しておきましょう。
nginx環境が良いです(archivebox dockerやdocumentもnginx前提)
cd (your provision) git clone https://github.com/pirate/ArchiveBox
2.4 ブラウザで見れるようにnginx.confを設定
魚拓(保存)したHTMLやpdf,pngをブラウザで見る場合はnginx.confを設定する必要があります。publishing your archiveページを参考にします。
sudo vim /etc/nginx/conf.d/xxx_ssl.conf location ~ ^/ArchiveBox/output { satisfy any; index index.html; autoindex on; try_files $uri $uri/ = 404; }
sudo kusanagi nginx でnginxリスタートし、https://xxx.com/ArchiveBox/output/ で表示されると思います。404が出た時は、1つもアーカイブしていないか、パスが間違っている可能性があります。

3. テストでとりあえず皆がやるyahoo.co.jpを魚拓
ArchiveBox/で、魚拓したいurlをechoし、パイプでarchiveboxに渡すです。
下記でみんな大好きyahooトップページの魚拓が始まるはずです。
echo 'https://yahoo.co.jp' | ./archive
実際は、archivebox/archive.pyを実行しているようです。
出来ると、output/archive/日時 ディレクトリが出来、一覧ページからクリックすると、下記のようにアーカイブした種類に応じてデータを見ることが出来ます。

自分のサイトもアーカイブしてみます。10秒近くかかりました。

4. configで設定を変える
何も指定していないと、archive_orgにデータを送ったりと、無駄なことをしてくれます。
あと、user-agentなどの設定のせいか、いくつかのサイトでは期待通りのアーカイブが出来ません。(対策されている)
下記ページにconfigの説明があります。
etc/ArchiveBox.conf.defaultがあるので、それをコピー.ArchiveBox.conf、このファイルを設定し、適用。 Creating a Config File参照
とりあえずは下記を
- SUBMIT_ARCHIVE_DOT_ORG=False
Archive.orgに送るの止め - FETCH_MEDIA=False
youtube-dlを使ってオーディオ、ビデオなど取得するのをやめてストレージ増えるのを防ぐ - USER_AGENTを普段使っているchromeのに変更しておく
CURL,WGET,CHROMEがあります - CHROME_BINARY=google-chrome-stable
confを適用し環境変数に一気に追加
eval export $(grep -v '^#' ./ArchiveBox.conf)
UserAgentを変更すると、いくつかのサイトはOKになりました。
いくつかのサイトはajax等での遅延読み込み、スクロール読み込みにも対応する必要がありそうですね。
次回は魚拓リストを作成し毎日走らせるようなことを書きたいと思います。
コメント