Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как правильно вывести дату при парсинге информаций?

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


     21.02.2016    Общие вопросы по PHP    458

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

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

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





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

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


Комментарии пользователей (2)

Sandman
13

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
7

299 | 77

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>';
        }
    }
}

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

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