Одной из актуальных задач на сегодняшний день является парсинг товаров с Яндекс Маркета. Мы решили не обходить эту задачу стороной и написать скрипт, который собирает заданные товары и всю информацию по ним и сохраняет её в базу данных MySQL.
Перед тем как написать скрипт мы с официального сайта скачали и установили последнюю сборку Mysql со всеми причиндалами и раскоментировали библиотеку mysql в php.ini, для того что бы можно было использовать функции работы с базами данных mysql в php.
Так как данные на сайте хранятся в utf-8 формате мы использовали для разработки скрипта Unicode версию программы Human Emulаtor. Эта версия лежит рядом с exe-шником обычной версии и называется XWeb Human Emulator MT UE.exe. Входные данные для скрипта тоже используются в unicode формате. На входе скрипт принимает файл с ключевыми словами, по которым он ищет нужные вам товары в следующем формате:
ноутбук
монитор
клавиатура
мышь
В результате работы скрипта создаётся база данных с таблицей товаров markets с
колонками Ключевое слово, Наименование товара, Средняя цена, Диапазон цен, Html код картинки, Html код кратких характеристик, Html код всех характеристик.
Можно все html результаты получать в виде текста. Для этого при разборе страниц товара вместо inner html надо использовать функции которые получают inner text.
В функции get_market_info($market_key) заменить $element->get_inner_html_by_attribute на $element->get_inner_text_by_attribute.
Результат работы скрипта в MySQL Workbench :

товары собранные с Яндекс Маркета в базе данных MySQL
Настройки скрипта:
// файл с товарами для разбора - тут указывается файл с ключевыми словами для поиска товаров
// данные должны быть в unicode
$a_markets = file("data/markets.txt");
// глубина прохода в поисковые результаты
// со скольких страниц собирать товары прежде чем перейти к следующему
// если нужно собирать все товары надо просто задать этот параметр = -1
$cnt_pages = 15;
Сам скрипт выглядит следующим образом:
quit();
}
// создадим базу данных для товаров
$sql = 'CREATE DATABASE IF NOT EXISTS yandex_markets';
if (!mysql_query($sql, $mysql_bd))
debug_mess("не удалось создать базу yandex_markets: " . mysql_error());
// ждём пока обработается
sleep(1);
// если уже была создана выберем базу
mysql_select_db("yandex_markets", $mysql_bd);
// ждём пока обработается
sleep(1);
// создадим таблицу если ещё нету её
$sql = 'CREATE TABLE IF NOT EXISTS markets (Market TEXT, Market_Name TEXT, Avg_Price TEXT, Range_Price TEXT, Image TEXT, Properties MEDIUMTEXT, All_Properties MEDIUMTEXT) ENGINE=MyISAM DEFAULT CHARSET=utf8';
// выполнить запрос
//mysql_query($sql,$mysql_bd);
if(!mysql_query($sql,$mysql_bd))
debug_mess("ошибка запроса : " . mysql_error());
// пройтись по всем товарам
for($j=0;$jnavigate("http://market.yandex.ru");
$input->set_value_by_name("text",$a_markets[$j]);
$button->click_by_number(0);
$button->click_by_inner_text("Подобрать",true);
// ходим до тех пор пока не кончатся ссылки по цифрам
while(true)
{
$models= $webpage->get_body_inter_prefix_all("class=b-offers__name","\">");
$a_models=explode("
",$models);
// пройдёмся по всем ссылкам
for($k=0;$kclick_by_href("modelid".$str_href,false);
// получить информацию по товару
get_market_info(trim($a_markets[$j]));
// вернуться назад
$browser->go_back();
}
// не перешли на следующую страницу
if(!next_page($crnt_page))
break;
}
}
// закрыть базу
mysql_close($mysql_bd);
debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу
");
// Quit
$app->quit();
?>
Скрипт написан 11.09.2012 в Human Emulator 4.4.19 Advanced.
На момент публикации статьи 11.09.2012 скрипт был рабочий.