У меня есть этот простой код, чтобы получить название любой страницы
<?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
Update Your Browser | Facebook
.
Я думаю, что проблема с useragent. Так есть способ изменить useragent или есть ли другое решение для этого?
Вы можете установить пользовательский агент в php.ini, без необходимости зависания. Просто используйте приведенные ниже строки перед загрузкой DOMDocument
$agent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"; ini_set('user_agent', $agent);
И тогда ваш код:
$doc = new DOMDocument(); @$doc->loadHTMLFile('http://www.facebook.com'); $xpath = new DOMXPath($doc); echo $xpath->query('//title')->item(0)->nodeValue."\n";
Прямого метода изменения пользовательского агента в 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";
Facebook, вероятно, не хочет, чтобы люди царапали свой сайт. С другой стороны, вы можете сделать это, но предоставить законный пользовательский агент (возможно, свой собственный, $_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));