Парсинг нескольких URL через DOM. PHP @ $ dom-> loadHTML ($ html. $ Html2);

0

Я пытаюсь разобрать 2 URL-адреса, используя PHP DOM. Мне интересно, может ли кто-нибудь дать мне представление о том, где я ошибся? Разве не удается проанализировать оба URL-адреса, как я сделал ниже?

<?php
$html = file_get_contents('http://www.reddit.com/r/funny');
$html2 = file_get_contents('http://www.9gag.com/');
$dom = new DOMDocument();
@$dom->loadHTML($html.$html2);

$xpath = new DOMXPath($dom);
$hyperlinks = $xpath->evaluate('//a[@class="thumbnail "]');
$hyperlinks2 = $xpath->evaluate('//a[@class="badge-item-img"]');

foreach($hyperlinks as $hyperlink) {
 if(strpos($hyperlink->getAttribute('href'), 'http://i.imgur.com/') !== FALSE){
echo "<img style='padding-left:30%' width=\"500\" src=\"" . $hyperlink->getAttribute('href') . "\" alt=\"\" />";
  echo "<br>";
  echo "<br>";
    echo "<br>";

}
  else{
       echo "";
  }
}
?>

EDIT Это изменение было добавлено, поскольку я пытаюсь выполнить сравнение для класса = "значок-элемент-img", и он ничего не возвращает. Разве это невозможно сделать так, как я это делаю?

<?php
// Init the '$url_array' array.
$url_array = array();
$url_array[] = 'http://www.reddit.com/r/funny';
$url_array[] = 'http://www.9gag.com/';

// Init the return '$ret' array.
$ret = array();

// Roll through the '$url_array' array.
foreach ($url_array as $url_value) {
  $html = file_get_contents($url_value);
  $dom = new DOMDocument();
  $dom2 = new DOMDocument();
  @$dom->loadHTML($html);

  $xpath = new DOMXPath($dom);
  $xpath2 = new DOMXPath($dom2);
  $hyperlinks = $xpath->evaluate('//a[@class="thumbnail "]');
  $hyperlinks2 = $xpath2->evaluate('//a[@class="badge-item-img"]');

  foreach($hyperlinks as $hyperlink) {
    if(strpos($hyperlink->getAttribute('href'), 'http://i.imgur.com/') !== FALSE){
      $ret[] = "<img style='padding-left:30%' width=\"500\" src=\"" . $hyperlink->getAttribute('href') . "\" alt=\"\" />"
             . "<br>"
             . "<br>"
             . "<br>"
             ;

    }
    foreach($hyperlinks2 as $hyperlinker) {
            $ret[] = "<img style='padding-left:30%' width=\"500\" src=\"" . $hyperlinker->getAttribute('href') . "\" alt=\"\" />"
             . "<br>"
             . "<br>"
             . "<br>"
             ;
    }
  } 
  }
// Roll through the '$ret' array.
foreach($ret as $ret_value) {
  echo $ret_value;
}
Теги:
dom

2 ответа

1
Лучший ответ

Похоже, вы пытаетесь совместить содержимое одного HTML файла поверх другого. Который закончится тем документом, который, скорее всего, задушит парсер DOM. Вместо этого вы должны прокрутить URL-адреса и затем вывести результаты:

<?php

// Init the '$url_array' array.
$url_array = array();
$url_array[] = 'http://www.reddit.com/r/funny';
$url_array[] = 'http://www.9gag.com/';

// Init the return '$ret' array.
$ret = array();

// Roll through the '$url_array' array.
foreach ($url_array as $url_value) {
  $html = file_get_contents($url_value);
  $dom = new DOMDocument();
  @$dom->loadHTML($html);

  $xpath = new DOMXPath($dom);
  $hyperlinks = $xpath->evaluate('//a[@class="thumbnail "]');
  $hyperlinks2 = $xpath->evaluate('//a[@class="badge-item-img"]');

  foreach($hyperlinks as $hyperlink) {
    if(strpos($hyperlink->getAttribute('href'), 'http://i.imgur.com/') !== FALSE){
      $ret[] = "<img style='padding-left:30%' width=\"500\" src=\"" . $hyperlink->getAttribute('href') . "\" alt=\"\" />"
             . "<br>"
             . "<br>"
             . "<br>"
             ;
    }
  }
}

// Roll through the '$ret' array.
foreach($ret as $ret_value) {
  echo $ret_value;
}

?>
  • 0
    См. Мое редактирование выше ... Это объясняет далее, что я имел в виду под вопросом. Я реализовал ваше решение в редактировании.
0

Я не уверен, что вижу проблему. Я тестировал этот код локально, и он работает. Вы получаете какую-то ошибку?

  • 0
    Смотрите редактирование. Есть сравнение, которое не может быть сделано по какой-то причине ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню