仕事の関係で、現在クライアントが運営しているサイトのリンク切れを修正することに。しかし、事態は短絡的ではなく、どうもいろいろリンク切れしている様子。気になったので個人的に 「リンク切れ」 を調査してみました。
First Step
リンク切れの調査、 Google WebMasters でもいけそうですが、今回は取引先のサイト。WebMasters のログイン権限がありません。そこでなにかいいツールはないか検索してみると、オンラインでいくつかのサービスを発見。
どれも使ってみましたが、、、スクローリングが終わらなかったり、よくわからない結果が表示されたり。。。一番良好だったものは Dr.Link Check。しかし、 404 が少ない。
これはどこまでスクローリングしての結果だろうか。。。 ということでオンライン以外の方法を検討。先方から Integrity というソフトも紹介されていましたが、 Mac用ソフトのため使用できず。。。
Second Step
実は最初の 「リンク切れ」 と聞いた時点で頭には Pythonプログラムの利用を思いついていました。Seleniumなど HTML操作を得意とするソフトがありますよね。それで「pyhton link check」で検索。良さそうなライブラリがいくつかあり以下の 2つを試してみました。
LinkChecker
こちらは GitHub でもスター数の多いライブラリ。GUIでも操作できる点がいいですね。それではレビューしてみましょう。
- インストール/ sudo pip2 install LinkChecker
- 実行/ linkchecker https://pythonchannel.com
簡単ですね。
インストールのマニュアルについては こちら に書かれています。 Mac とか Windows とか OS 別に書かれていますね。注意点としては、 Python3 には対応していないこと。 「pip2」 と Python2 指定でインストールしましょう。 当サイトのような小さいサイトであれば問題なくリンクチェックできるのですが、今回調べる対象サイトはページ数膨大。 time out エラーを出すようになりました。。。
Result Error: ReadTimeout: HTTPSConnectionPool(host='blog.codecamp.jp', port=443): Read timed out. (read timeout=60)
LinkChecker 良さそうだけど、ダメだな、ということで次のライブラリを使ってみることに。
pylinkvalidator
- インストール/ pip install pylinkvalidator
- 実行/ pylinkvalidate.py -P https://pythonchannel.com
pylinkvalidateの実行にはいくつかの引数が用意されています。今回は定番の -P。
- -P 、 --progress/ 進捗を表示という意味
他の引数は GitHub をご確認下さい。
それで今回対象となった Webサイトは約 800ページぐらいですが、 1時間チョットプログラムが完了するのにかかりました。。。その結果、約 4,555の URL をチェックし、 565件の 404 エラー。すごい数ですね。それで本当に 404 エラーかどうか確認してみると、 リンク切れしていました。ちなみにスクロール結果のレポートはなく、リンクエラーのみ最後の表示してくれます。
【エラーの表示例】
not found (404): https://●●.jp/●●
from htths://●●/img/●●.jpg
試しに他の yahoo!Japan や Medium、アメブロ などメジャーなサイトでもリンク切れがあるか調べようとするも、 403エラーやチェック対象が 10件程度と限定的。 よくみる「まだ東京で消耗しているの?」はスクローリングできて、リンク切れは 206件。 10,695ページある中、206件のリンク切れ、なかなか少ないのではないでしょうか。。。
リンク切れのチェックで困っている方、一度 Pyhtonでチェックしてみませんか?
当記事の価値
当記事は、1人工 半日程度の調査時間をサポートすると自己概算し、 ¥7,500円/役立ち の価値と推測。
社会貢献度を実感するために、自己裁量で記事の価値化をテスト中。「役だった」と感じる人がいれば 7,500 × 役立ち数 とも考えられる。