りょーちのこのサイトではphpによるプログラムを幾つか紹介したりしているのですが、一発モノが多く、体型立てて説明することがあまりないので、ちょいと説明用のサイトを作ってみた。
で、第1回目はいきなりハードル高いですが「スクレイピング処理」について書いてみることにした。
このサイトでも「スクレイピング」という言葉はたまに利用しているのだが、もう一度整理してみると、APIが提供されていないWebサービスもバックグラウンドにデータベースなどがあるはず。で、そのWebサービスはデータベースから読み込んで機械的にデータを「あるパターン」に流し込んでサイトを作成しているであろう。
なので、目に見える部分(表示されているHTMLファイル)を解析し、必要なデータのみを取得して、自前のサーバ側で再度加工して、提供するようなことができると思われる。このことを「スクレイピング(scraping)」というらしい。
ちなみに、scrapeは「削る」って言う意味なので、必要な部分を削り取って利用するってことっすね。
一見難しそうに見えますが、やっていることはHTMLファイルを取得して、パターン(規則性)を見出し、加工するってことです。
下記にphpを利用するユーザにtidy関数を用いたスクレイピング処理の簡単なプログラミングについて解説したサイトを作ってみました。
りょーち自身、スクレイピング処理について体型立てて説明されたサイトがあまりないので、殆ど独学なのであるが、まあ、入門用のサイトとして利用いただければと思うっす。
なるべく、基本概念だけ記載し、ソースを表示したり、実際稼動するプログラムを掲載したりしたので、なんとなく分かる人には分かると思われる。
上記サイトでは Tidy 関数 と マルチバイト文字列関数 (mbstring) の2種類を主に利用しているが、肝の部分はTidy関数であろう。
HTMLファイルを取得し、tidyオブジェクトを作成し、解析するという流れで記載してあるので、はじめての人にも(多分)分かりやすいのではないかと(勝手に)想像するっす。
上記サイトの例として取り上げたのは「はてなブックマーク」のトップページの「最近の人気エントリー」を表示するプログラムにしてみたっす。
上記サイトを読めば、こんなプログラムも10分くらいで作成できると思われる。
(はてなのサイトはとてもキレイにコーディングされているのでスクレイピングしやすいサイトの一つと言えるであろう)。
ちなみに、りょーちが Tidy 関数を利用して作成してみたサイトは下記の通り。
- あわせて読みたい 勝手 API for JSONP
- feecleトップページ 取得 API for JSONP
- リンク取得 API for JSONP
- BOOKLOG ASIN No 取得 for JSONP
- アフィリエイトサービスプロバイダ利用チェック
- ページ内のリンク一覧を取得
これらのプログラムも phpによるスクレイピング処理入門 をお読みいただければ、多分「あー、こんなことやってるんだねぇ」と推測でき、且つ、自分で同じようなもの(というかもっと素晴らしいもの)を作ることができると思われます。
なんかかっちょいいの作ったら教えてください。
なお、スクレイピング対象として、取り上げて欲しいサイトなどがあったら、上記サイトに例として作成しようと思うので、コメントなどいただければと思います。
よろしくばい。
現在、スクレイピング+wordpressでサイトを作りたいと考えています。具体的には、ちょっと例があれなのですが、エロサイト系ですw
作ってみたいサイトの例(ウィルスとかないですがエロサイトなのでアクセス注意):
http://www.eromate.net/
http://anond.hatelabo.jp/keyword/%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
上のハテナのリンクにはエロサイトを構築するまでのおおまかな流れ?みたいなのはあるのですが、正直なところプログラム初心者にはハードルが高いような気がします。
つまり、いくらエロサイトが作れると分かったところで、分からないことばかりで途中で挫折してしまいます
・一体どのようにして女優名と動画記事をひもづけるのか?
・重複して登録されないようにするにはどうしたらいいか?
・ページ処理してある「1、2,3・・・・」場合、どのようにしてスクレイピングするのか
・負荷は大丈夫なのか?
など分からないことばかりです。
個人的には、おおまかな流れだけを説明するだけでなく「この手順でやっていけば→こんなエロサイトが作れる!」みたいな詳しい解説があれば自然と理解しやすい(理解がはかどる)と思いますし、「こんなサイトが作れるなら、応用でこんなサイトも作れるんじゃね?」となるんじゃないかなと思っています。
>>なお、スクレイピング対象として、取り上げて欲しいサイトなどがあったら、上記サイトに例として作成しようと思うので、コメントなどいただければと思います。
とのことなのでコメントさせて頂きました。
もしエロ系は無理でしたら、はてなブックマークをスクレイピング対象として取り上げてほしいです。
具体的には、
http://b.hatena.ne.jp/search/tag?q=%E3%83%AC%E3%82%B7%E3%83%94
http://b.hatena.ne.jp/search/tag?q=%E6%96%99%E7%90%86
です。
・タグ一覧を取得しそのタグのページをスクレイピング
といった感じですかね?
はてなブックマークの件については最も原始的な方法ですが、
私ならこういう感じで実現すると思います。
1. はてなブックマークの特定のタグのページにアクセス。
2. a class="capture"の部分からまでを取得
3. 2.からhref属性を取得
4. 2.からalt属性を取得
という感じでできそうです。
取得するにはtidyとphpの文字列関数でなんとかなりそうな予感です。
ご参考まで。