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>
注意点
- 相手のサーバー設定によってはページ情報を取得できないことがあります。
- 相手のサーバーに負荷をかけるため連続でのアクセスはやめましょう。
コメント