PHPでWebページのHTMLコードを取得するにはどうすればよいですか?


91

PHPでリンク(Webページ)のHTMLコードを取得したい。たとえば、リンクが

/programming/ask

次に、提供されるページのHTMLコードが必要です。このHTMLコードを取得してPHP変数に格納したいと思います。

これどうやってするの?


詳しく説明していただけますか?特定のURLにWebリクエストを送信し、変数への応答を読み取りたいですか?
チャトゥランガチャンドラセカラ09

はい、同じことをしたいのですが、そのWebリクエストによって返された変数にソースコード全体が必要です。
Prashant

1
このツールを使用すると、簡単にHTMLをスクラップできます。
Faraz Kelhini 2014

allow_url_fopenをtrueに設定しても、この関数はページのHTMLを返しませんか?他に何を確認する必要がありますか?
CodeForGood

回答:


138

PHPサーバーがURL fopenラッパーを許可している場合、最も簡単な方法は次のとおりです。

$html = file_get_contents('/programming/ask');

さらに制御が必要な場合は、cURL関数を確認する必要があります。

$c = curl_init('/programming/ask');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);

404が心配です。リンクが存在しない場合、そのコンテンツは必要ありません。代わりにエラーメッセージを表示しますか?URLで404エラーが発生しているかどうか(どのようにしてURLが機能しているか)を確認するにはどうすればよいですか?
Prashant

1
@Prashant:200または404などを提供するcurl_getinfo呼び出しを追加するように編集しました
グレッグ

また、PHPはどのようにして現在のページのHTMLを取得できますか?
Renaro Santos 2014

これはクロスドメインですか?
I.Am.A.ガイ

PHP7では動作しません。php.iniを確認し、fopenがオンになっている。
Kaspar L. Palgi


11

YahooからYQLライブラリをチェックアウトすることをお勧めします:http ://developer.yahoo.com/yql

手元のタスクは、と同じくらい簡単です

select * from html where url = 'http://stackoverflow.com/questions/ask'

コンソールでこれを試すことができます:http : //developer.yahoo.com/yql/console(ログインが必要です)

また、Chris Heilmannsのスクリーンキャストで、他に何ができるかについての素晴らしいアイデアをご覧ください。http//developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collat​​ing_distributed_information.html


10

簡単な方法:使用file_get_contents()

$page = file_get_contents('http://stackoverflow.com/questions/ask');

URL対応のfopenラッパーを使用できるようにするには、にいるallow_url_fopen必要がtrueありますphp.ini

より高度な方法:あなたがPHPの設定を変更できない場合は、allow_url_fopenあるfalseデフォルトでかつEXT /カールがインストールされている場合は、使用してcURLライブラリーを、目的のページに接続するために。


allow_url_fopenをtrueに設定しても、この関数はページのHTMLを返しませんか?他に何を確認する必要がありますか?
CodeForGood

4

ソースを変数として保存する場合は、file_get_contentsを使用できますが、curlの方が優れています。

$url = file_get_contents('http://example.com');
echo $url; 

このソリューションはあなたのサイトにウェブページを表示します。ただし、カールの方が適しています。



3
include_once('simple_html_dom.php');
$url="http://stackoverflow.com/questions/ask";
$html = file_get_html($url);

このコードを使用して、HTMLコード全体を配列(解析された形式)として取得できます。「simple_html_dom.php」ファイルをこちらからダウンロードします。http: //sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download


2

URLからコンテンツを取得する 2つの異なる簡単な方法を次に示します

1)最初の方法

ホスティング(php.iniまたはどこか)からAllow_url_includeを有効にします。

<?php
$variableee = readfile("http://example.com/");
echo $variableee;
?> 

または

2)2番目の方法

php_curl、php_imap、php_opensslを有効にする

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$variableee = get_dataa('http://example.com');
echo $variableee;
?>

1

DomDocumentメソッドを使用して、個々のHTMLタグレベル変数も取得できます。

$homepage = file_get_contents('https://www.example.com/');
$doc = new DOMDocument;
$doc->loadHTML($homepage);
$titles = $doc->getElementsByTagName('h3');
echo $titles->item(0)->nodeValue;

1

$output = file("http://www.example.com");:私は有効になるまで動作しませんでしたallow_url_fopen, allow_url_include,し、file_uploadsphp.iniPHP7のために

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.