2012-01-05 3 views
-1

Где проблема с этим простым кодом:скребковые ссылки из результатов

<?php 

$dom = new DOMDocument(); 
@$dom->loadHTMLFile('https://www.google.com/search?q=newyork'); 
$xpath = new DOMXPath($dom); 
$entries = $xpath->query("//h3/a/@href"); 
foreach($entries as $e) { 
    echo $e->textContent . '<br />'; 
} 
?> 

когда я бегу я получаю только белое окно (ничего). Проблема с Google?

+0

Удалите '@' и активируйте отчет об ошибках, чтобы увидеть возможные ошибки –

+0

@ из href или из @ $ dom? –

+0

От '@ $ dom' --- –

ответ

0

Некоторые советы, продолжая this related answer by Michael:

Попробуйте получать HTML с file_get_contents():

$dom = new DOMDocument(); 
$google_results = file_get_contents('https://www.google.com/search?q=newyork'); 
$dom->loadHTML($google_results); 

Если file_get_contents() терпит неудачу, а также, убедитесь, что allow_url_fopen включен в конфигурации (php.ini), или рассмотрите выборку удаленных данных с помощью cURL.

В любом случае, при включении отчетов об ошибках PHP должен показывать вам некоторые ошибки или предупреждения, что всегда полезно, если что-то не работает должным образом.

+0

ОК, спасибо, но: Предупреждение: DOMDocument :: loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: expecting ';' в Entity, строка: 3 в /home/someurl/public_html/google1.php в строке 5 Предупреждение: DOMDocument :: loadHTML() [domdocument.loadhtml]: Неожиданный конечный тег: br в Entity, строка: 5 in/home /someurl/public_html/google1.php в строке 5 –

+0

Что означает, что ошибки и предупреждения? как это решить? –

+0

Это предупреждения, которые вы подавляете с помощью оператора '@' в исходном коде. Скорее всего, это связано с недействительным HTML (Google не очень строго относится к действительности HTML). Но «DOMDocument» обычно может справиться с этим. Убедитесь, что HTML правильно загружен (например, 'echo $ google_results;'). Если это так, вам нужно попытаться выяснить, почему происходит обход дерева DOM. Сначала попробуйте что-то более простое (например, '$ headings = $ dom-> getElementsByTagName ('h3'); foreach ($ headings as $ heading) echo $ heading-> nodeValue." \ N ";'). – Viktor

Смежные вопросы