PHPでサイトのHTMLソースを取得する

PHPで外部サイトのHTMLを取得する定番の2つの方法をご紹介します。

  • file_get_content
  • cURL

cURLは、オプションを上手く使えばログインサイト内のHTMLも取得できるスグレモノです。

file_get_contents

こちらはとても簡単です。

<?PHP
$URL = "https://www.yahoo.co.jp"; //取得したいサイトのURL
$html_source = file_get_contents($URL);

これだけ。

だけども、たまにこれでは取得ができない場合があります。そんな時は、次の方法↓

cURL

今度は少し複雑ですが、様々なオプションを指定できたり、パフォーマンス的にも良いとか。以下のコードをそのままコピペでいけます。

<?PHP

$URL = "https://www.yahoo.co.jp"; //取得したいサイトのURL

$ch = curl_init();

//ここからオプション
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  //証明書検証しない
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //レスポンスを表示するか
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  //"Location: " ヘッダの内容をたどる
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);  //"Location: " ヘッダの内容をたどる深さ
//ここまでオプション

$output = curl_exec($ch) or die('error ' . curl_error($ch));   //cURL セッションを実行する
curl_close($ch);  //リソースを閉じ、システムリソースを解放

//日本語のための文字コード設定など
mb_language("Japanese");
$html_source = mb_convert_encoding($output, "UTF-8", "auto");

もし、そのままのコードで取得できない場合は、取得先のサイトに合わせて、オプション部分を工夫する必要があるかもしれません。ログイン情報をPOSTすれば、ログインサイト内からも取得できます。

用意されているオプションが結構多いので、公式で確認して必要なものを実装してみてください。

 

取得したソースから特定の要素を取り出す方法は、下記の過去記事↓

PHPでウェブスクレイピング