парсинг html через get_file_contents () - PullRequest
0 голосов
/ 25 ноября 2011

сказано, что лучший способ разбирать html - через DOM, например:

<?

$html = "<span>Text</span>";
$doc = new DOMDocument();
$doc->loadHTML( $html);

$elements = $doc->getElementsByTagName("span");
foreach( $elements as $el)
{
    echo $el->nodeValue . "\n";
}


?>

но в приведенном выше примере переменная $ html не может быть URL-адресом или может быть ?? Разве я не должен использовать функцию get_file_contents (), чтобы получить HTML страницы?

Ответы [ 3 ]

1 голос
/ 26 ноября 2011

Вы должны использовать DOMDocument :: loadHTMLFile для загрузки HTML из URL.

$doc = new DOMDocument();
$doc->loadHTMLFile($path);

DOMDocument::loadHTML анализирует строку HTML.

$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($path));
0 голосов
/ 26 ноября 2011

Если у вас возникли проблемы с использованием DOM, вы можете использовать CURL для анализа.Например:

$url = "http://www.davesdaily.com/";

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_URL, $url);
$input = curl_exec($curl);

$regexp = "<span class=comment>([^<]*)<\/span>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
  foreach($matches as $match);
}
  echo $match[0];

Сценарий должен захватывать текст между <span class=comment> и </span> и хранить внутри массива $match.Это должно повториться Entertainment.

0 голосов
/ 25 ноября 2011

Может быть, но это зависит от разрешения allow_url_fopen в вашей установке PHP. В основном все PHP-функции на основе файлов могут принимать URL-адрес в качестве источника (или места назначения). Имеет ли смысл такой URL, зависит от того, что вы пытаетесь сделать.

например. выполнение file_put_contents('http://google.com') не будет работать, так как вы пытаетесь сделать HTTP-загрузку в Google, и они не позволят вам заменить их домашнюю страницу ...

, но выполнение $dom->loadHTML('http://google.com'); сработало бы и засосало бы главную страницу Google в DOM для обработки.

...