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