PHPを使ったスクレイピング

PHP

PHPを覚えていくうえでやってみたかった、とあるサイトの必要な部分を取得したいという「スクレイピング」と呼ばれるものを試してみました。

スクレイピングとは

具体的にスクレイピングとは以下のことです。

WebサイトからWebページのHTMLデータを収集して、特定のデータを抽出、整形し直すことである。

こちらを今回PHPで試してみました。

ライブラリの「phpQuery」を使う

スクレイピング自体はこのphpQueryを使わなくてもいいのですが、該当箇所(HTMLのclassやid)の指定がjQueryのように出来て分かりやすかったのでこちらを使いました。

サンプルコード

以下のコードはとあるサイトから該当classの箇所を取得して表示するサンプルです。処理が終わったときわかりやすいよう最後に「処理が終わった」というテキストをあわせて表示しています。

<?php

require_once('phpQuery-onefile.php'); //ダウンロードしたphpQueryのファイルを読み込む

$html = file_get_contents("http://xxxxxxxxx/"); //http://xxxxxxxxx/を読み込む
mb_language('Japanese'); //文字化け対策1
$html = mb_convert_encoding($html, "HTML-ENTITIES", "auto"); //文字化け対策2
$doc = phpQuery::newDocument($html); //phpQueryを使用

$text = $doc["#id .class"]; //取得したいidやclassをjQueryのように指定

//処理が終わったら表示させる文言
function endText(){
echo '処理が終わりました。';
}
?>

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php 
echo $text; //取得したテキストを表示
register_shutdown_function( "endText");
?>
</body>
</html>

注意点

  • 相手のサーバー設定によってはページ情報を取得できないことがあります。
  • 相手のサーバーに負荷をかけるため連続でのアクセスはやめましょう。

参考サイト