market.yandex.ru парсер

Недавно появилась задача парсить странички. Точнее market.yandex.ru.

Собрать все описания в готовом к вставке в базу виде а также доступные изображения к товару.

Исторически сложилось что с регулярками у меня хуже чем с XSLT.

Все хорошо но маркет не дает валидный код и парсить его напрямую у меня не получилось.

На помощь пришел Tidy.

 true,
"output-xml"    => true,
"wrap"          => 200);

$tidy = new tidy;
$tidy->parseString($content, $config, "utf8");
$tidy->cleanRepair();

$xml=simplexml_load_string ($tidy);

$groups = $xml->xpath("//table[@class="modelProperties"]//tr/td[@class="title"]/b");
$strings = $xml->xpath("//table[@class="modelProperties"]//tr/td[@class="title"]/b|//table[@class=\'modelProperties\']//td[@class=\'label\']/span/text()|//table[@class=\'modelProperties\']//tr/td[position()=2]/text()");

$results_groups=array();
$results=array();
$i=0;
$GI=0;

//print_r($strings);
while($ixpath("//table[@class="modelpict"]//a/@href");
if(empty($photos))
{
$photos = $xml->xpath("//table[@class="modelpict"]//img/@src");
}

foreach( $photos as $photo)
{
print "";
}

print "
"; foreach($results_groups as $k=>$v) { print ""; foreach($results[$k] as $arr) { print ""; } } print "
Технические характеристики
".$v."
".$arr[0]."".$arr[1]."
"; ?>

18 thoughts on “market.yandex.ru парсер”

  1. это все Xpath, но он работает только с валидным xml, что бы парсить любые странички надо преобразовать html у меня есть об этом подробнее…

  2. У меня на локалке вот что:
    Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /var/www/tt.servebbs.org/htdocs/parser/pars.php on line 4

    Fatal error: Class ‘tidy’ not found in /var/www/tt.servebbs.org/htdocs/parser/pars.php on line 13

  3. Что-то не работает код… Стало интересно, я тоже раньше делал парсур, но у меня получилось аж 15 Кб главного скрипта и еще несколько примочек типа антикапча, лог, остановка/продление в случае разрыва…

    Tpoxa, как вы боретесь с капчей Яндекса?

  4. Когда я написал этот пример яндекс маркет еще не боролся с грабберами. Не было капчи и других блокировок по количеству запросов.

  5. Parse error: syntax error, unexpected T_STRING in Z:\home\localhost\www\index2.php on line 19

    что за ошибка?

  6. Думаю имеет смысл обновить информацию или удалить статью, раз она не действует на сегодняшний день!
    Вопрос очень актуальный и многие бы с удовольствием бы прочли обновление!!!

  7. Господа, что значит не актуально? Всё прекрасно работает =)) Чуть-чуть сообразительности и не много знания php и у Вас тоже всё заработает. Как? Вам сюда http://php.net

  8. Спасибо Komyak, я добавил некоторые комментарии в код, также хочу добавить что эта статья это скорее как один из возможных способов решения проблемы. И никак не претендует на полноценное приложение.

  9. Извращенство на мой взгляд. Не легче готовый xml парсить.
    Представляю сколько займёт времени на вставку в базу каких-то 200 000 записей. Из xml занимает 2м 30с.

Leave a Reply

Your email address will not be published. Required fields are marked *