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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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

 

なお本記事は、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のプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

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

フェッチには 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コースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。