wgetの使い方

2020年1月16日

今どきオフライン作業なんてあんまりないけど、wgetって単独ファイルだけでなく、JavaScriptなどで作られてない静的なリンクなら辿って次を取得することもできる。昔の貧弱なネットワークの頃は重宝した。

取得してみる

とりあえずこのサイトをwgetで取得してみる。パラメータは以下のサイトを参考にした。(–domains指定は–span-hostsと同時指定禁止なので除外)

shell – How to download an entire site with wget including its images – Super User

$ wget --recursive \
--level 5 \
--page-requisites \
--adjust-extension \
--span-hosts \
--convert-links \
--restrict-file-names=windows \
--domains elephantcat.work \
--no-parent \
elephantcat.work

上記コマンドを実行すると、elephantcat.workから、再帰的に5段階までリンクを辿り、同一ホスト内の全ページをローカルファイルに保存してくれる。保存する際には、ホスト名のディレクトリ下にURLから想定される名前で保存される。HTML内には埋め込まれる要素やリンクなどもあるが、静的なものは残らず解析して取ってきてくれる。クエリなどがあっても、URIとして区別されればちゃんとそれをファイル名にして保存される。

オプション説明

オプション意味
–recursive再帰的に取得
–level 数字指定された深さまで再帰的に取得
–page-requisites画像など HTMLを適切に表示するために必要なすべてのファイルを取得
–adjust-extensionMIMEタイプなどを元に拡張子を自動で修正する
–span-hosts同一ホスト内の リンク のみ辿る
–convert-links同一ホストへのリンクを相対リンクに書き換える
–restrict-file-names=windowsファイル名の大文字/小文字統一や使用禁止文字のエスケープに使用するモードの指定
–domains指定ドメイン以外を取得しない
–no-parent親ディレクトリ側へのリンクを辿らない

注意事項

重要なのは探索範囲と時間に大きく影響する–levelと、–convert-links。

–levelはサイトの大きさやクロール可能な時間に合わせて適宜修正が必要。全ての経路を辿れる深さ以上を指定しても取得時間は増加しない。

ダウンロードされたファイルは必ずしもURLとおりの構成にできるわけではないので、–convert-linksはダウンロードしたファイルをオフライン閲覧できるよう、 HTMLの中身を書き換えることを意味している。そして、この処理は、指定した範囲のファイルを全て取得し終わった後、最後に行われるので注意。「時間かかるからこの辺でやめる→Ctrl+C」とかするとこの変換はかからない。