1

任意のページのタイトルを取得するためのこの簡単なコードがあります

<?php
    $doc = new DOMDocument();
    @$doc->loadHTMLFile('http://www.facebook.com');
    $xpath = new DOMXPath($doc);
    echo $xpath->query('//title')->item(0)->nodeValue."\n";
?>

私が試したすべてのページでは正常に機能していますが、Facebook では機能していません。

Facebookで試してみると、表示されていませんがWelcome to Facebook - Log In, Sign Up or Learn More、表示されていUpdate Your Browser | Facebookます。

ユーザーエージェントに問題があると思います。ユーザーエージェントを変更する方法はありますか、それとも他の解決策はありますか?

4

3 に答える 3

2

でユーザー エージェントを直接変更する方法はありませんDOMDocument。curl を使用して html を取得し、DOMDocument. からデータを取得する方法は次のとおりです。curl

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);

DomDocument以下のメソッドを使用して に渡すことができます。

$dom = new DomDocument();
$dom->loadHtml($data);
$xpath = new DOMXPath($dom);
echo $xpath->query('//title')->item(0)->nodeValue."\n";
于 2013-08-15T08:03:02.257 に答える
0

Facebook はおそらく、人々が自分のサイトをスクレイピングすることを望んでいません。一方、できることはcURLそれに対してですが、正当なユーザー エージェント (おそらく独自のもの)$_SERVER['HTTP_USER_AGENT']を提供し、その結果をDOMDocument.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'www.facebook.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

$dom = new DomDocument();
$dom->loadHtml(curl_exec($ch));
于 2013-08-15T07:58:18.433 に答える