Как организовать парсинг страницы с помощью PHP Simple HTML DOM?

Нужно спарсить меню href ссылок из меню. Вот пример


    Использую PHP Simple HTML DOM. Пишу запрос
    $simpleHTML = new SimpleHTMLDOM;
    $all = $simpleHTML->file_get_html('http:/site.com');
    foreach ($all->find('.catalog a') as $link) {
    echo $link->href;
    }

    В итоге мне выводится только один href - последней ссылки. Кто знает, почему? Что заметно, только у этой ссылки нет data-атрибутов. Может, они влияют? Как победить?
  • Вопрос задан
  • 9809 просмотров
Решения вопроса 1
gogolinsky
@gogolinsky Автор вопроса
Да, в subportfolio расположена <li class="portfolio">
036494c0eb90472e9d1b3ab30f807518.jpg
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
metamorph
@metamorph
У Вас либо глючная версия парсера, либо глючная обертка над ним.
Взял парсер отсюда: simplehtmldom.sourceforge.net
Выполнил:
<?php
require_once('./simple_html_dom.php');
header('Content-type: text/plain');

$content = '<ul class="catalog">
    <li class="portfolio" data-type="in" data-inc="PGEgaHJlZj0iL2NhdGFsb2cvZHZlcmktbWV6aGtvbW5hdG55eWUvZHZlcmktc2hwb25pcm92YW5ueXllL2VsaXQiPtCh0LXRgNC40Y8g0K3Qu9C40YI8L2E+"><a href="/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/elit">Серия Элит</a></li>
    <li class="portfolio" data-type="in" data-inc="PGEgaHJlZj0iL2NhdGFsb2cvZHZlcmktbWV6aGtvbW5hdG55eWUvZHZlcmktc2hwb25pcm92YW5ueXllL2tvbWZvcnQiPtCh0LXRgNC40Y8g0JrQvtC80YTQvtGA0YI8L2E+"><a href="/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/komfort">Серия Комфорт</a></li>
    <li class="portfolio" data-type="in" data-inc="PGEgaHJlZj0iL2NhdGFsb2cvZHZlcmktbWV6aGtvbW5hdG55eWUvZHZlcmktc2hwb25pcm92YW5ueXllL3N0YW5kYXJ0Ij7QodC10YDQuNGPINCh0YLQsNC90LTQsNGA0YI8L2E+"><a href="/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/standart">Серия Стандарт</a></li>
    <li class="portfolio"><a href="/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/euro">Серия Евро</a></li>
</ul>';

$all = str_get_html($content);
foreach ($all->find('.catalog a') as $link) {
	echo $link->href . "\n";
}


Результат:
/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/elit
/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/komfort
/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/standart
/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/euro
Ответ написан
gogolinsky
@gogolinsky Автор вопроса
Попробовал оригинальную библиотеку. Да, со сторокой HTML она работает отлично, но если парсить страничку сайта, то получается та же штука - некоторые теги a не распознаются.
Вот страница dveri.com/. Нужно спарсить все ссылки с левого меню, которые находятся в <li> с классом .portfolio.
Код
require('./simple_html_dom.php');
	$content = file_get_html('http://dveri.com');
	foreach ($content->find('.portfolio a') as $link) {
		echo $link->href . '<br>';
	}

Результат
/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/euro
/catalog/dveri-mezhkomnatnyye/dveri-ekoshpon/vetro
/catalog/dveri-mezhkomnatnyye/dveri-iz-massiva
/catalog/dveri-mezhkomnatnyye/dveri-emal
/catalog/dveri-mezhkomnatnyye/dveri-pvh
/catalog/dveri-mezhkomnatnyye/dveri-stekljannye
/catalog/dveri-mezhkomnatnyye/dveri-stroitelnyye
/catalog/protivopozharnyye-dveri-lyuki
/catalog/razdvizhnye-dveri
/catalog/arki-mezhkomnatnye
/catalog/furnitura-dlya-dverey/fiksatory
/catalog/furnitura-dlya-dverey/stroitelnya
/catalog/furnitura-dlya-dverey/dovodshiki
/catalog/stenovyye-potolochnyye-paneli

Но это далеко не все ссылки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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