Webサイトを巡回してリンク切れを確認するPython製のCLIツール『linkchecker』を使ってみる

リンク切れページの調査について、前回wgetコマンドを使用した方法について記述したが、これだとリンク元のページがどこかがわからないため、あまり扱いやすいとはいえない。 で、リンク切れチェック用のツールを探してみたところ、『linkchecker』なるツールが良さそうだったのでこれを使ってみることにした(ただ、最近はあまりアップデートがされていないらしく、作者にも連絡が取れてない状態でどうなるかわからない様子。とりあえず新しくプロジェクトが作成されているようなので、今後はそちらに移っていくのかなと)。

今回は、この『linkchecker』をインストールして実際にサイトのリンク切れ情報について取得する。

1. インストール

まず、以下のようにpipからlinkcheckerをインストールする。 この際ただpipからインストールすると、どうもPythonのバージョンのご検知で正常に動作しないようなので注意。 アップデート待ちだろうか。

sudo pip install linkchecker --upgrade
sudo pip install requests==2.9.2

2. リンクチェックをする

無事インストールができたら、実際にリンクチェックをしてみよう。 単純に標準主力で取得するのであれば、以下のように引数にURLを指定してやればいい。 出力時のイメージは画像を参照。

linkchecker http://sample.domain

とはいえ、このやり方だとあまり後から整理して利用しにくいので、ファイルに出力させるのがいいだろう。 「-F type」オプションでタイプ別(CSV形式(「;」区切り)やSQLなど)で出力させることができる(デフォルトではカレントディレクトリ配下にlinkchecker-out.type)ので、あとで見直して整理、リンク切れの対応をするのも楽だろう。

設定できるオプションも豊富にある。 詳細についてはmanを参照してもらうとして、以下によく使いそうなオプションを記載する。

  • -f CONFIGFILE … コンフィグファイルを指定する。デフォルトは「~/.linkchecker/linkcheckerrc」
  • --stdin … スペース区切りで巡回するURLを受け付ける
  • -t NUMBER … スレッド数の上限を設定する。デフォルトは10
  • --check-css … CSS URLの構文チェックをする
  • --check-html … HTML URLの構文チェックをする
  • -F TYPE[/ENCODING][/FILENAME] … 指定したTYPEで巡回結果を出力する。TYPEはtext、html、sql、csv、gml、dot、xml、sitemap、none、blacklistが指定できる。ファイル名を指定しない場合、デフォルトで「linkchecker-out.TYPE」にログは出力されるようになる。出力先のファイル名を指定する場合エンコードタイプもセットで指定する必要があるので、例えば「./test.csv」としてUTF-8形式でCSVとして出力するなら「-F csv/UTF-8/test.csv」としてオプションをし指定する
  • --no-warnings … 警告メッセージ(対象のページがSSL証明でエラーになったなど)を非表示にする
  • -o TYPE … コンソール上に表示させるメッセージのタイプを指定する。TYPEはtext、html、sql、csv、gml、dot、xml、sitemap、none、blacklistが指定できる。
  • --scan-virus … ClamAVを用いてコンテンツのウィルスチェックをする
  • -v … 全てのURLをチェックして詳細出力する
  • -C … Cookieの送受信を有効にする
  • --cookiefile=COOKIE … 指定したCookieファイルを使用する
  • --ignore-url = REGEX … 指定された正規表現にマッチしたURLはチェックしない
  • -u … http/ftp認証で使用するユーザ名を指定する
  • -p … http/ftp認証で使用するパスワード入力を受け付ける
  • --user-agent … ユーザエージェントを指定する
  • --check-extern … 外部のURLもリンク切れチェックする

Cookieの指定もできるので、ログインが必要なページでもリンクチェックが行えるし(事前に調整は必要になるだろうが)パラレルでのチェックも行えるので、非常に扱いやすい。 出力ログに対象のhtmlファイルの何行目にあるlinkが切れてるか、といった情報も出力されるし、精度もオンラインのチェックツールと比べて非常に良い。


参考