2014-01-05 3 views
0

Я использую несколько простых php для очистки информации с веб-сайта, чтобы можно было читать ее в автономном режиме. Код, кажется, работает нормально, но я беспокоюсь о неопределенном поведении. Сайт немного плохо кодирован, и некоторые из элементов, которые я захватил, используют один и тот же идентификатор с другим элементом. Я бы предположил, что getElementById пересекает DOM сверху вниз, и причина, по которой у меня нет проблемы, состоит в том, что мне нужен первый экземпляр с идентификатором. Есть ли способ обеспечить такое поведение? У элемента нет другого реального способа его отличить, поэтому выбор его по id представляется лучшим вариантом. Я включил приведенный назад пример кода, который я использую ниже.PHP getElementById поведение с идентификатором элементов id

Спасибо.

<?php 

$curl_referer = "http://example.com/"; 
$curl_url = "http://example.com/content.php"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Scraper/0.9'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($ch, CURLOPT_REFERER, "$curl_referer"); 
curl_setopt($ch, CURLOPT_URL, "$curl_url"); 
$output = curl_exec($ch); 

$dom = new DOMDocument(); 
@$dom->loadHTML($output); 

$content = $dom->getElementById('content'); 
echo $content->nodeValue; 
?> 

ответ

3

Попробуйте использовать выражение XPath, чтобы получить первый содержащий идентификатор. Как что: //*[@id="content"][1]

код PHP будет так:

$xpath = new DOMXPath($dom); 
$xpath->query('//*[@id="content"][1]')->item(0)->nodeValue; 

И наконечник: использовать libxml_use_internal_errors(true), вы можете поймать их последними для регистрации или попробовать уборки вверх документ.

Редактировать
Эй, в вашем коде вы устанавливаете UA, как «скребок/0.9», большинство людей, которые пишут плохой сайт не смотрит на это и не делает регистрации входящих запросов в их страниц, но я не рекомендую поместить UA так, просто поместите браузер UA, как пользовательский агент chrome, потому что если они отслеживают и видят запросы, содержащие этот пользовательский агент, они будут черным списком (будущим) ,

+0

Я даже не использовал XPath, чтобы найти его. Спасибо за это. EDIT: Спасибо за головы и за UA. – Session

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