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

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

1.インストール

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

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

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が切れてるか、といった情報も出力されるし、精度もオンラインのチェックツールと比べて非常に良い。

【参考】

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 1 comments

  1. Pingback: linkcheckerでログインが必要なページのリンクチェックを行う | 俺的備忘録 〜なんかいろいろ〜

Leave a Comment

メールアドレスが公開されることはありません。

*