APIを活用したスクレイピング技術

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

先日に「Composerの解説」で「Goutte(PHPのWebスクレイピングツール)がComposer経由でないとインストールできなくなった」という話をしましたよね。ただ、スクレイピングと言ってもどんな技術かわからない人も多いので今回はスクレイピングについてカンタンにご紹介いたします。

APIを活用したスクレイピング技術

まず前提としてスクレイピングはAPIを使わなくても実現できます。しかし、逆にAPIを経由してスクレイピングという技術を活用することもできます。複雑な話なので以下で詳しく解説していきますね。

スクレイピングとは?

Webの世界には「スクレイピング」という特殊な技術があります。

おそらく大半の方は知らないはずです。わかりやすく言えばスクレイピングは「指定した特定のURLから欲しい情報をピンポイントで取得する技術」を言います。ウェブサイトから情報を抽出する技術ですね。

たとえば「オークションサイト」から特定商品の価格をまとめて取得するのも1つ。もし落札額を自動で取得できるならこれまでの価格変動をグラフ化できたりと、特定サイトの情報を再活用できますよね。

ただし、スクレイピングにはいくつか問題点もあります。重要なのは以下3つです。

・使い方次第では指定したサイトURL側に大きな負荷をかける可能性がある
・情報を取得して無加工のまま表示すると著作権侵害に触れる可能性がある
・ウェブサイトがそもそもスクレイピング行為を認めていない可能性がある

とても便利な機能だけに色々な考え方が絡んできます。特にスクレイピングは負荷が問題点になりやすい。そのため本来はスクレイピングしなくても情報を取得できるAPI提供があるかどうかが重要です。

考え方は以下の順番となります。

1. まずはサービス側がAPI(データ受け渡しの窓口)提供をしていないか確認する
2. もしAPI提供がないサービスなのであればそもそもデータを取得するのを諦める
3. APIを利用できない状態でどうしてもデータを取得したいならスクレイピングする

そして「3」のスクレイピングには大きく3つ種類があります。

A. 素のJavaScriptを使ってコードを書く 
B. 一般公開されているライブラリを活用
C. スクレイピング専用APIサービスを使う

どんどん話が複雑になっていきますね。ひとまず「API」を理解しておきましょう。

APIを提供する会社は意外と貴重

APIはApplication Programming Interface(アプリケーションプログラミングインターフェイス)の略語です。

アプリケーション(何かしらのサービス)をプログラミング(システム開発)するためのインターフェイス(技術提供)。第三者が新しいサービスを作りやすいように通信窓口を準備してくれているわけですね。

ただし、実際は「APIを提供していないサービスの方が多い」です。

そもそもなぜAPIを提供するの?

API提供は「優秀なエンジニアを雇うための手段」です。

見方を変えると「企業としての余裕(太っ腹な情報公開)」とも言えますよね。GoogleやYahooや価格コムなど新鋭的な会社はAPIを提供しているケースが多く、そのおかげで車輪の再発明をしなくて済みます。

ただ、APIは「企業側の鶴の一声で仕様が変わる」という懸念点も持ち合わせます。

大手企業が提供するAPIサービス

つまり、どんなウェブサイト(またはWebサービス)も以下の2つに分かれます。

・APIを提供している
・APIを提供していない

たとえばGoogleにアクセス解析を導入できるGoogleアナリティクスがありますよね。

Googleアナリティクスは「運営サイトのアクセスを細かく分析できる便利ツール」です。一般的な使い方とは別でAPIが公開されていてAPIでプログラミングをすれば独自の解析サービスを作成できてしまいます。

事例を出すとGoogleアナリティクスAPIを活用した有名サービスに「AIアナリスト」があります。独自のアクセス解析ツールにも見えますが、裏側はGoogleアナリティクスAPIが使われています。

💻手に職をつけて安定的に働きたい人

⇒ 完全無料のプログラミングスクール - 受講料無料でプログラミング習得 -

もちろん、Google以外にもAPIを公開しているサービスは多くあります。有名な話ですが「価格ドットコム」も昔はAPIを公開(2006年9月に開始して2012年6月末日に新規受付を終了)していました。

API提供がないサービスの場合

もしAPIを公開していないサービスから「情報を取得する」にはスクレイピングしか方法がありません。

ただWebの業界ではグレーとも言われるスクレイピング。相手側に負荷をかけるとトラブルになり兼ねません。またそもそもスクレイピング行為をNGとしているウェブサイトもいくつかあります。

この点は「どう活用するか?」と「相手側の捉え方」もあるのでよく考えましょう。

スクレイピング専用のAPIサービス

さらに最近は「スクレイピング技術を提供するAPI」という新しいテクノロジーも出てきています。スクレイピングのAPI技術を提供するというのは上記で書いた3種類のスクレイピングでいう「C」ですね。

A. 素のJavaScriptを使ってコードを書く 
B. 一般公開されているライブラリを活用
C. スクレイピング専用APIサービスを使う

わかりやすく言うと以下のイメージ。

A = 書き手の実力次第
B = 無料で使えて多機能
C = 有料だけど高機能

どんな手法を使うかで実現できるシステムも違ってくるので選び方はよく考えなければなりません。

スクレイピングAPIを使った表示例

下記は実行するための記述例(スクレイピングAPI)です。もちろん、サービスによって書き方も違います。当然ですが、実際に利用するためにはサービスが指定するAPIキーなどの連携も必要となります。

内容は「example.comサービスの運営元が提供するスクレイピングAPI」で「example.net/sample.html」のデータを取得する一文です。APIを提供するサブドメイン経由で通信して情報を受け取っています。

https://api.example.com/scraping?url=https://example.net/sample.html

APIを使ったスクレイピングはまだ業界的に新しいテクノロジーなので少しイメージしづらいかもしれません。そして次が「一般公開されているスクレイピングライブラリ(Goutte)」を使った書き方です。

//ライブラリの読込み
require_once './vendor/autoload.php';

//useキーワードでインポート
use Goutte\Client;

//インスタンスを生成する
$client = new Client();

//値の取得とDOM構築
$dom = $client->request('GET','https://example.net/sample.html');

//要素の取得
$span = $dom->filter('div span')->each(function($element){
	echo $element->text()."\n";
});

もし素のJavaScriptで書くならもっと複雑になります。難易度では以下の通りです。

Aの難易度:コードが複雑で処理も重くなりがちなのでむずかしい
Bの難易度:ライブラリ側が先に準備してくれているので使いやすい
Cの難易度:APIサービス側が手軽な構造にしているのでカンタン

最近はGoutte以外でもスクレイピング用のライブラリもたくさん揃っていたり、スクレイピングのAPI技術を提供しているサービスもあるのでどういった手法を選ぶかで作れるシステムも大きく変わってきます。

まとめ

GoogleやYahooなどの有名企業が解放しているAPIサービスは安心感がありますよね。

とはいえ大手企業のAPIは仕様が「バージョンが1から2へ切り替わったりと変化がめまぐるしい」のも事実。そもそもAPIはマッシュアップと呼ばれる“混ぜ合わせて良いサービスを作る”ための手段の1つです。

先述した通り「本来はデータを取得したいサービスの運営元が直接APIを公開しているのが最適」ではありますが、まだAPI準備が整っていないために公開できていないサービス(またはAPI提供を中断したサービス)も多いです。もしシステム開発で使う場合は「将来的な展望や使い道」をよく考えて採用しなければなりません。

システム開発では下準備や設計が大切です。ぜひご参考くださいませ。

【今すぐ無料プラグインを手に入れる】
無料ダウンロードはこちら

ワードプレス専門家に丸投げする

WPホームページ研究所はワードプレスを中心としたブログ作成・ホームページ制作・オウンドメディア構築・プラグイン設定・調整など幅広いカスタマイズに対応しております。 記事の掲載情報はもちろんお好みの機能をいただければ専属スタッフが心を込めて対応させていただきます。まずはお気軽にお問い合わせくださいませ。

お問い合わせの種類をお選びください(もっとも近い項目)

法人の場合は法人名とご担当者のお名前をご入力ください

返信時のご連絡に利用するメールアドレスをご入力ください

運営中のウェブサイトURLがあればご入力ください

お困りの内容があれば詳しい内容をお聞かせください