オーダーメイドコース
icon
icon

PHPでスクレイピングを行う方法【初心者向け】

初心者向けにPHPでスクレイピングを行う方法について解説しています。スクレイピングとはWebページなどの特定の箇所やデータを抜き出すことです。実際にプログラムを書いて説明しているので、ぜひ参考にしてみてください。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

PHPでスクレイピングを行う方法について解説します。Webページの特定の箇所を抜き出すことをスクレイピングと言います。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでスクレイピングを行う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

スクレイピングとは

正しくはWebスクレイピングと言います。略してスクレイピングと呼ぶことも多いです。
Web サイトから目的のデータを抽出する処理を指します。

通常のWebページであるHTMLから欲しいデータを抽出することが多いですが、XML(RSS, ATOM)やJSONデータから抽出することもあります。

 

スクレイピングの方法

スクレイピングをするためには、Webサイトからデータをダウンロードするフェッチと、ダウンロードしたデータを解析して目的の箇所を抽出する処理に分かれます。

PHPでフェッチをするには、file_get_contents( )関数やPHP拡張機能のcURL関数を使います。
またcomposerで管理しているプロジェクトであれば、Guzzleのようなライブラリを使うこともできます。

フェッチしたデータは、文字列関数で処理しても構いませんし、HTMLやXMLならばPHPのDOMモジュールを利用することも可能です。

JSONデータであれば、json_decode( )関数でPHPの配列やオブジェクトに変換して処理することが可能です。

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

このプログラムは気象庁のサイトから横浜市の気象情報をスクレイピングします。

フェッチには cURLモジュール、抽出には DOM(DOMDocument, DOMXpath)モジュールを使用しています。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.data.jma.go.jp/obd/stats/data/mdrr/synopday/data3.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
if ($html === false) {
    exit('天気情報のフェッチに失敗');
}

$doc = new DOMDocument;
@$doc->loadHTML($html);

$xpath = new DOMXpath($doc);

$nodes = $xpath->query('//*[@id=""main""]/table[2]/tr[28]/td');

foreach ($nodes as $key => $node) {
    echo $key, ':'. $node->textContent, PHP_EOL;
}

 

実行結果(例)

0:横浜
1:1010.7
2:1015.6
3:22.9
4:26.5
5:20.3
6:77
7:51
8:2.1
9:4.5
10:東
11:6.7
12:東北東
13:7.2
14:2.0
15:2.0
16:1.0
17:--
18:--
19:薄曇一時晴
20:曇時々雨

 

この記事を監修してくれた方

大網 清和(おおあみきよかず )

現在は派遣スタッフとして Laravel で大手ポータルサイトの開発業務をしています。

プログラム歴は長く中学生の頃から始めて35年くらいになります。古くは BASIC、C、COBOLなどを経験し SQL を集中的に使っていた時期もあります。
Web の開発はまだ2年位とあまり長くは無いですが、プログラミングの楽しさを伝えられたら良いなと思っています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。