PHPでwebサイトクロールに挑戦 #1「システム考案」

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

もはやWEBページをクロールするのは、Googleだけの特権じゃないという事を考え始めました。
検索エンジンにおいては、全てのページの全てのジャンルの全ての人を対象にして、WEBページをクロールして、解析して、検索にヒットさせているのである意味手に負えないぐらいのアルゴリズムが動いていると思います。

クロールシステムについて考える

個人的にブックマークをしてよく見に行くWEBページって少なくてもいくつかあるのではないでしょうか?
株をやっている人であれば、自分の持ち株の会社のWEBページだったり、
ECで商品を日常茶飯時に購入している人であれば、アマゾンや楽天などだったり、
自分の趣味志向に応じてブックマークの種類も偏っていると思います。

僕個人では、以前はGoogleのRSSのリーダーサービスでニュース記事を集めて、電車などで便利に見ていたのですが、そのサービスも終了して、今では、人工知能系のニュースアプリを使うことが、多くなりました。

人工知能はどうでもいいんですが、ニュースサイトから記事を取得するのって、そんなに難しい事なのかと考えてみたけど、
実はサイトをクロールして記事の文字やURLや画像などを取得さえできれば、簡単に行えるという事は用意にわかります。

RSSに対応しているサイトであれば、情報を取得する事は更に簡単になりますね。

WEBサイトというのは、大きなデータベースのようなモノであり、自分のブックマークしているページの情報は自分にとってとても重要という事なので、ここの情報を柔軟に集められれば、とても有意義という事ですね。

技術的に考える

基本的にはWEBページのソースコード(HTML)を取得して、中のDOM構造で必要な箇所を取得できれば、要件は満たされます。

WEBページも更新頻度が1日の間で頻繁に行うものもあれば、怠惰なブロガーのページのように1月に数回程度というページもあり、定期的にきっちり更新されるページもあります。

googleクロールよりもはるかに楽なのが、自分の指定のサイトだけであれば、ある程度は頻度から、範囲まで、見極められることが可能だという事。

取得する言語問題

基本的には、特定のURLからHTMLソースコードを取得してきて、ローカルサーバーにデータ保存する方式なので、CGIモジュールが必要ですね。

Perl、PHP、Python、Ruby、あたりで構築すると簡単にできると思います。

しかし、一つ問題があり、最近のWEBページの特性として、「非同期読み込み」のページに関しては、
上記のモジュールで取得する場合、ファーストアクセスのソースコードしか取ってこられません。

Googleがモバイルページのフレンドリー解析で行なっているように、ちゃんとレンダリングして取得するのがベストだと思うんですが、初回はその問題を無視したいと思います。
※やり方が全く変わってしまうので・・・

大きく処理を分けると

1.HTMLソース取得
2.解析

この2段階になるので、以後のバージョンアップで各セグメントの機能改修をすればいいかと思います。

とりあえず、サーバーでPHPを使ってソースコードを取得して、DOM操作をしてみたいと思います。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です