Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как правильно вывести дату при парсинге информаций?

Как правильно вывести дату при парсинге информаций?


     21.02.2016    Все вопросы » Общие вопросы по PHP    708

вопрос
Здравствуйте,
Появилось необходимость сделать парсер информаций с сайта epscape[dot]com.
Собрал простенький php скрипт который парсит что мне нужно, кроме даты :( ...
Подскажите пожалуйста, как можно вывести дату ?

У меня сейчас выводится вот так:
Как правильно вывести дату при парсинге информаций?

а мне нужно так:
Как правильно вывести дату при парсинге информаций?





Также хотелось бы услышать ваше мнение, на сколько собранный мною код плох ?)

Ответа пока нет


2 комментария

Sandman
Юзер

Sandman - 21 февраля 2016 19:02 -


// Это адрес сайта, мы записываем его с переменную $pageurl
$pageurl = 'http://epscape.com/calendar/next'; // http://epscape.com/calendar/next


// Получаем полный html текст страницы и сохраняем в переменную $html
$html = file_get_contents($pageurl);

// меняем кодировку на utf-8
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'utf-8');

// отключаем вывод ошибок из-за неправильного html кода
libxml_use_internal_errors(TRUE);

// тут мы создаем объект класса domDocument
$dom = new DOMDocument();

// И загружаем в него html код
$dom->loadHTML($html);
$xpath = new DomXPath($dom);



// задаём радиус парсинга
$radius = $xpath->query('//div[@class="left-side"]/*');

$i=0;
foreach($radius as $radiu) {
$img = $xpath->query("//div[contains(@class, 'episodes-image')]//img")->item($i)->getAttribute('src');

$title = $xpath->query("//div[contains(@class, 'shrutitle')]/a")->item($i)->nodeValue;

$original_title = $xpath->query("//div[contains(@class, 'shtitle')]")->item($i)->nodeValue;

$episode_name = $xpath->query("//div[contains(@class, 'eptitle')]")->item($i)->nodeValue;

$date = $xpath->query("//div[contains(@class, 'date')]")->item($i)->nodeValue;

$i++;


echo $img. '| ' .$title. '| ' .$original_title. '| ' .$episode_name. '<br />';


}
?>


misha-koder
Юзер

misha-koder - 21 февраля 2016 20:33 -

xpath - это отличный инструмент для парсинга, но вы сотворили какую-то ерунду.
В первую очередь вам нужно получить все элементы с классами epdate и episode:

$xres = $xpath->query('//*[@id="body"]/div[2]/div[1]/div[1]/div/div[@class="epdate" or @class="episode"]');

Затем пройтись по их дочерним элементам и собрать нужную информацию. Сделать это можно при помощи childNodes, либо getElementsByTagName:

if ($xres->length) {
    $date = false;
    
    foreach ($xres as $item) {
        if ($item->getAttribute('class') == 'epdate') {
            if ($item->getElementsByTagName('small')->length) {
                $curdate = $item->getElementsByTagName('small')->item(0)->nodeValue;
            } else {
                $curdate = $item->getElementsByTagName('span')->item(0)->nodeValue;
            }
            
            if ($curdate != $date) {
                echo '<p><b>'.$curdate.'</b><p>';
                $date = $curdate;
            }
        } else {
            echo $item->childNodes->item(0)->childNodes->item(0)->childNodes->item(0)->getAttribute('src').'<br>';
        }
    }
}

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх