X-Scripts

Power by humanemulator

НАШИ КОНТАКТЫ:
ICQ My ICQ 625657402: 625657402
Наш скайп: igor_sev2
Email : order@x-scripts.com

Сообщество программистов и манимейкеров


Human Emulator Free!
Бесплатная версия программы Human Emulator!
Скачать программу можно тут!

Скрипт Human Emulator парсер Яндекс Маркета

Одной из актуальных задач на сегоднешний день является парсинг товаров с Яндекс Маркета. Мы решили не обходить эту задачу стороной и написать скрипт, который собирает заданные товары и всю информацию по ним и сохраняет её в базу данных 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;

Сам скрипт выглядит следующим образом:

<?php

$xhe_host ="127.0.0.1:7011";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");
// ////////// настройки скрипта//////////////////

// файл с товарами для разбора
$a_markets = file("data/markets.txt");

// глубина прохода в поисковые результаты
$cnt_pages = 15;
// текущая страница
$crnt_page =1; 

// режим отладки
$dbg=true;

// /////////////////// дополнительные модули /////////////////////

// функции 
require_once("functions.php");

// ///////////////////// script /////////////////////////////////////////////////////////

debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт запустили");
// соединяемся с базой
$mysql_bd = @mysql_connect('localhost:3306', 'root', 'password'); 
// если не подключились выдать сообщение об ошибке
if (!$mysql_bd) 
{
	 die('ошибка соединения: ' . mysql_error());
	 // закончить скрипт
	 $app->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;$j<count($a_markets);$j++)
{
   // обнулим страницы перед поиском
   $crnt_page =1;
	// перейти в yndex market
	$browser->navigate("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("<br>",$models); 
		// пройдёмся по всем ссылкам
		for($k=0;$k<count($a_models);$k++)
		{
			// перейти на страницу товара
			$str_href=get_string($a_models[$k], "modelid","&");
			$anchor->click_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\] ")." скрипт закончил работу<br>");

// Quit
$app->quit();
?>



Скрипт написан 11.09.2012 в Human Emulator 4.4.19 Advanced. На момент публикации статьи 11.09.2012 скрипт был рабочий.

скачать скрипт
Количество скачиваний: 3486

<< Другие скрипты