Простой PHP DOM Parser не работает в случае переключения (PHP) - PullRequest
0 голосов
/ 15 ноября 2011

У меня проблема с парсером Simple PHP DOM.Я в основном должен очистить каталог сайта для изображений и их заголовков.

Сайт должен очистить это http://pinesite.com.

Я придумал следующий код, чтобы сделать это (он будет вызываться через AJAX):

<?php
include ('simple_html_dom.php');
$function = $_GET['function'];
switch($function) {
  case 'subcat':
    $maincat = $_GET['cat'];
    $url = "http://www.pinesite.com/meubelen/index.php?".$maincat."&lang=de";
    $html = file_get_html($url);
    $data = $html->find('.box_166_content .act_path li a');
    $output ="";
    foreach ($data as $subcat) {
      $title = $subcat->plaintext;
      $href = $subcat->href;
      $link['title'] = $title;
      $link['href'] =substr($href,10);
      $output[] = $link;
    }
    echo json_encode($output);
    $html->clear();
    unset($html);
    unset($url);
    break;

  case 'images':
    $subcat = $_GET['subcat'];
    $url = "http://www.pinesite.com/meubelen/index.php?".$subcat;
    $html = file_get_html($url);
    $iframe = $html->find('#the_iframe',0);
    $url2 = $iframe->src;
    $html->clear(); 
    unset($html);

    $html2 = file_get_html("http://www.pinesite.com/meubelen/".$url2);
    $titles = $html2->find('p');
    $images = $html2->find('img');
    $output='';
    $i=0;
    foreach ($images as $image) {
      $item['title'] = $titles[$i]->plaintext;
      $item['thumb'] = $image->src;
      $item['image'] = str_replace('thumb_','',$image->src);
      $output[] = $item;
      $i++;
    }
    echo json_encode($output);
    break;
}
?>

Так что это файл "functions", часть, которая не работает, является последним случаем.

Я не знаю, что здесь не так, поэтому я проверил его (последний случай) в отдельном файле (Я поместил URL, который он получает от iFrame (эта часть работает):

<?php
include_once "simple_html_dom.php";

$fullurl = "http://www.pinesite.com/meubelen/prog/browse.php?taal=nl&groep=18&subgroep=26";

$html = file_get_html($fullurl);
$titles = $html->find('p');
$images = $html->find('img');
$output='';
$i=0;
foreach ($images as $image) {
  $item['title'] = $titles[$i]->plaintext;
  $item['thumb'] = $image->src;
  $item['image'] = str_replace('thumb_','',$image->src);
  $output[] =$item;
  $i++;
}
echo json_encode($output);
?>

Как я уже сказал, первая часть должна возвращать то же, что и вторая (если вы добавите? Function = images & subcat = dichtekast) но это не так. Я предполагаю, что это потому, что я использую парсер несколько раз.

У кого-нибудь есть предложения для меня?

Ответы [ 2 ]

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

Проблема заключается в том, что ваша переменная $url2 содержит html-сущности, и когда вы соединяете ее с корневым URL-адресом, результат не является действительным URL-адресом.Таким образом, функция file_get_html() не будет получать URL-адрес (и, следовательно, данные), который вы ожидаете, но что-то другое.

Быстрое решение вашей проблемы - html_entity_decode () , но выВозможно, вы захотите прочитать об отладке тоже.Это может быть так же просто, как применить var_dump(); к каждой переменной, которую вы используете, и посмотреть, где вывод отличается от ожидаемого.

Возможно, вы также захотите проверить некоторые проблемы безопасности.Запись $subcat = $_GET['sub_cat'] ни в коем случае не безопаснее, чем использование $_GET['sub_cat'] напрямую.

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

Я не уверен, что полностью понимаю вопрос, но из того, что я могу понять, вы пытаетесь получить некоторые изображения и связанные с ними заголовки с данной веб-страницы, а затем сохранить их?Если это так, то здесь есть пища для размышлений.(извините, это не может быть более конкретным).

используйте file_get_contents для захвата html-содержимого.

$html = file_get_contents('www.someurl.com');

, а затем preg_match () для всех тегов изображения и других данных, которые могут вам понадобиться.Существует много информации о том, как сделать этот Соответствующий атрибут SRC тега IMG, используя preg_match

 $matches = preg_match('<img>*<\/img>', $html); # this is a guess

После того, как у вас есть коллекция тегов изображения в виде массива, используйте curlсохранить изображения

http://www.edmondscommerce.co.uk/php/php-save-images-using-curl/

Я думаю, что ваша проблема заключается в извлечении html-контента из нужного вам контента

...