Скрипт Human Emulator парсинга HTML-страницы с использованием XPath

В этой статье мы рассмотрим один из примеров написания скрипта для парсинга HTML-страниц с использованием XPath на примере сайта bing.com.


Сперва определимся с тем, что такое XPath и зачем оно нужно, если есть регулярные выражения?


XPath (XML Path Language) — это язык запросов к элементам XML-подобного документа (далее для краткости просто XML).

XPath призван реализовать навигацию по DOM в XML.

Regexp — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.

По сути это строка-образец (шаблон), состоящая из символов и метасимволов и задающая правило поиска.

Итак, главная разница в том, что XPath специализируется на XML, а Regexp — на любом виде текста.

В: Зачем использовать XPath, если есть regexp, в котором можно сделать тоже самое?
О: Простота поддержки.

Синтаксис у regexp такой, что уже через неделю может быть проще всё переписать, чем вносить изменения,
а с XPath можно спокойно работать. И синтаксис у xpath довольно компактный,xml’ё-фобы могут быть спокойны.

Простой пример для вдохновения — получим значение атрибута «href» у, например, тега «a».

Yohoho!

Regexp:



XPath:

"string(//a/@href)"

XPath + PHP:

$dom = new DOMDocument;

// "@" Это, конечно, плохо. Но HTML не обязан быть
// валидным, в отличие от XML.
@$dom->loadHTML("Yohoho!");

$xpath = new DOMXpath($dom);
    
$res = $xpath->query("//a");
    
echo $res->item(0)->getAttribute("href") . PHP_EOL;

Быстро (несколько небольших страниц) пробежаться по основам XPath можно в туториале от W3Schools.

Как использовать XPath в PHP можно почитать в документации на php.net.
И в небольшом тутораильчике от IBM DeveloperWorks.

Теперь определимся с необходимым функционалом скрипта:

* Возможность указывать произвольный поисковый запрос


* Парсим только первую страницу поисковой выдачи


* Из поисковой выдачи нам нужно:


* заголовок


* ссылка


* номер в выдаче

Исходя из нашего ТЗ составляем примерный алгоритм работы скрипта:

1) Заходим на bing.com


2) Вводим поисковую фразу


3) Получаем со страницы необходимый результат

Приступим к написанию парсера поисковой выдачи http://bing.com.
Для начала, создадим базовый каркас скрипта.

    // coding: windows-1251
    // Настройка HumanEmulator
    // -----------------------------------------------
    // Где запущен XHE
    $xhe_host = "127.0.0.1:7010";
    // HumanEmulator lib
    require "../../Templates/xweb_human_emulator.php";
    // Our tools
    require "tools/functions.php";
    
    // Настройки скрипта
    // -----------------------------------------------
    
    // Скрипт
    // -----------------------------------------------
    
    // Quit
    $app->quit();

В настройки добавим переменную для хранения поискового запроса.

// Поисковый запрос
$text = "ХуманЭмулятор";

Заходим на сайт.

// Базовый URL
$base_url = "https://www.bing.com/?setlang=en";
$browser->navigate($base_url);

Вводим поисковую фразу.

$input->set_value_by_attribute("name", "q", true, $text);
sleep(1);
$element->click_by_attribute("type", "submit");
sleep(5);

Сохраним в переменную содержимое страницы.

// Получаем содержимое страницы
$content = $webpage->get_body();

Настроим xpath-объект:

$dom = new DOMDocument;
@$dom->loadHTML($content);
$xpath = new DOMXpath($dom);

Теперь у объекта $xpath есть метод «query» в который мы будем передавать наше xpath-выражение.
Давайте начнём создавать xpath-выражение.
Открыв исходный код страницы с результатами поисковой выдачи увидим, что сами результаты находятся внутри тега «li».

  • Т.о. наше xpath-выражение выберет со страницы все поисковые результаты.

    $results = $xpath->query("//li[@class=\"b_algo\"]");
    

    На одной странице у нас должно быть 1 или больше результатов, проверим себя:

    if($results === false)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        elseif($results->length === 0)
        {
            echo "Поисковый запрос '{$text}' не принёс результатов." . PHP_EOL:
            $app->quit();
        }
        echo "Нашли {$results->length} совпадений." . PHP_EOL;
    

    Здесь стоит обратить внимание на ветку if, где мы сравниваем кол-во результатов xpath-поиска с нулём.
    Если наше xpath-выражение ничего не нашло, то это может означать две вещи:


    * Bing действительно ничего не нашёл.


    * Bing что-то нашёл, но поменял вёрстку на странице, и наше xpath-выражение необходимо исправлять.

    2-й пункт достаточно коварный, в таких случаях, когда xpath-выражение ничего не находит необходимо дополнительно
    сверятся, чтобы удостоверится, что xpath-выражение не устарело (хотя и это не даст 100% гарантий).

    В нашем случае будем сверяться с тем, что Bing пишет кол-во найденных результатов.

    14 results
    

    А если результатов по поисковому запросу нет, то:

  • No results found for ...

  • Т.о. мы получаем такую конструкцию проверки:


    — Если xpath-запрос ничего не нашёл и поисковый запрос ничего не нашёл, то на странице будет html-код с «No results found».


    — Если xpath-запрос ничего не нашёл, а поисковый запрос что-то нашёл, то на странице будет html-код с «N results».

    Обновим проверку результата xpath-запроса.

    if($results === false)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        elseif($results->length === 0)
        {
            // Если bing ничего не нашёл
            $check_results1 = $xpath->query("//li[@class=\"b_no\"]");
            // Если bing что-то нашёл
            $check_results2 = $xpath->query("//span[@class=\"sb_count\"]");
            
            if($check_results1 === false or $check_results2 === false)
            {
                echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
                $app->quit();
            }
            
            if($check_results1->length > 0 and $check_results2->length === 0)
            {
                echo "Поисковый запрос '{$text}' не принёс результатов." . PHP_EOL:
                $app->quit();
            }
            else
            {
                echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
                $app->quit();
            }
        }
        else
        {
            echo "Нашли {$results->length} совпадений для '{$text}' на 1-й странице поисковой выдачи." . PHP_EOL;
        }
    

    Если всё хорошо и что-то нашлось, то у нас в $results будет N сущностей с результатами отработки xpath-запроса.

    Каждая сущность будет содержать такой HTML-код

      
    

    Теперь можно приступить непосредственно к выборке интересующих нас данных.

    foreach($results as $num => $item)
        {
            // В $item у нас сущность с одним результатом из поисковой выдачи
        }
    

    Получаем номер в поисковой выдаче.

    echo "Номер в поисковой выдаче: " . ($num + 1) . PHP_EOL;
    

    Получаем заголовок.

    $title = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($title === false or $title->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $title = utf8_decode($title->item(0)->textContent);
        echo "Заголовок: '{$title}'" . PHP_EOL;
    

    В данном случае мы в метод «query» передали вторым параметром текущий $item и в xpath-запросе не указывали «//» (т.е. искать сначала страницы).

    2-й параметр означает контекст поиска для xpath-запроса, т.е. искать будем не по всей странице, а только по маленькому html-кусочку из $item.
    И, наконец-то, получаем ссылку.

    $link = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($link === false or $link->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $link = $link->item(0)->getAttribute("href");
        echo "Ссылка: '{$link}'" . PHP_EOL;
    

    Вообще-то, ссылку можно было получить и без совершения дополнительного xpath-запроса, использовав результат из поиска заголовка.
    Но оставим так, для наглядности.

        // Получаем заголовок и ссылку
        //
        $title_link = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($title_link === false or $title_link->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $title = utf8_decode($title_link->item(0)->textContent);
        echo "Заголовок: '{$title}'" . PHP_EOL;
        $link = $title_link->item(0)->getAttribute("href");
        echo "Ссылка: '{$link}'" . PHP_EOL;
    

    Полезные ссылки:

    Wikipedia XPatch
    Wikipedia Rugular expression
    W3.org XPatch
    W3schools XPatch
    Mozilla.org XPatch
    PHP.net
    Ibm.com x-xpatch
    Ibm.com x-xpatchphp

    Скрипт написан 28.04.2015 в Human Emulator 4.9.18 Advanced.

    скачать скрипт

    Скрипт Human Emulator cборщик трастовых сайтов для размещения активных ссылок

    Предлагаем вашему вниманию скрипт сборщик трастовых сайтов. Этот скрипт в очень короткие сроки соберёт для вас базу трастовых сайтов, на которых можно оставить активную ссылку. Для того что бы собрать эту базу нам понадобится любой чужой прогнанный сайт. Найти такие сайты в сети не представляет труда. Главное подобрать свеже прогнанный сайт.

    Так же с помощью этого скрипта можно посмотреть активность любого интересующего вас сайта в яндекс за любой промежуток времени.

    Собственно в чём фишка. Мы берём подобранный нами сайт и вводим в яндекс такой вот запрос — «http://site.ru» date:20110901..20111020. В выдачу яндекс выдаст все последние проиндексированные ссылки, которые появились в интрнете за заданный промежуток времени. Мы получаем все страницы, на которых стоят эти ссылки. Далее скрипт парсит выдачу яндекса. Теперь у нас есть ссылки из выдачи, далее проверяем их Тиц и удаляем ненужные, а затем проверяем оставшиеся ссылки на наличие обратной кликабельной ссылки. Опять таки удаляем лишнее. Вот и всё база готова.

    Настройки скрипта:

    
    // сайт по которому ищем ссылки
    $search_site="интересующий нас сайт";
    // запрос для поиска ссылок для заданного сайта и временной диапозон 
    $search_string="\"http://$search_site\" date:20120301..20120716";
    
    // разделитель для результатов
    $separator="\n";
    // ограничение по тиц - здесь задаём интересующий нас ТИЦ
    $tz_limit=0; // удалить ссылки с нулевым тиц
    
    // глубина прохода в поисковые результаты
    $cnt_pages = 15;
    $crnt_page =1; - страница выдачи яндекс с которой начинать разбор ссылок
    

    Собственно сам скрипт:

    
    $xhe_host ="127.0.0.1:7011";
    
    // The following code is required to properly run XWeb Human Emulator
    require("../../Templates/xweb_human_emulator.php");
    
    // /////////////////////////// настройки ///////////////////////////////////////////////
    
    // сайт по которому ищем ссылки
    $search_site="интересующий нас сайт";
    // запрос для поиска ссылок для заданного сайта и временной диапозон 
    $search_string="\"http://$search_site\" date:20120301..20120716";
    
    // разделитель для результатов
    $separator="\n";
    // ограничение по тиц 
    $tz_limit=0; // удалить ссылки с нулевым тиц
    
    // глубина прохода в поисковые результаты
    $cnt_pages = 15;
    $crnt_page =1;
    
    // режим отладки
    $dbg=true;
    // //////////////////////// дополнительные модули /////////////////////////////
    // основные функции
    require_once("functions.php");
    // ////////////////////////// скрипт //////////////////////////////////////////////////////
    
    // navigate to google
    $browser->navigate("http://www.ya.ru");
    // задать в поиск
    $input->set_value_by_name("text",$search_string);
    // искать
    $button->click_by_number(0);
    
    // разберём данные
    $res_urls = ya_parse($separator);
    
    // если нет ссылок останавливаем скрипт
    if($res_urls=="")
    {
        debug_mes("нет ссылок!!!");
        $app->quit();
    }
      
    // переходим на проверку тиц
    $browser->navigate("http://www.raskruty.ru/tools/cy/");
    // зададим urls 
    $textarea->set_inner_text_by_name("urrrls",$res_urls);
    // проверим
    $button->click_by_inner_text("Проверить тИЦ",false);
    // получить ссылки с тиц больше лимита
    $res_urls=get_urls_tz($tz_limit,$separator);
    
    // переходим на проверку активных ссылок
    $browser->navigate("http://webmasters.ru/tools/tracker");
    // задать сайт для проверки 
    $input->set_value_by_name("url",$search_site);
    // задать url-s  не больше 100 штук
    $textarea->set_value_by_name("urls",$res_urls);
    // проверить
    $button->click_by_inner_text("Поехали",false);
    // ждём пока отработает 
    sleep(3);
    // получить только активные ссылки
    $res_urls = get_links_res($separator);
    
    // пауза перед записью в файл
    sleep(1);
    // записать результат в файл
    $textfile->write_file("res\\ya.".$search_site.".txt",$res_urls,60);
    
    // сообщим о завершении
    debug_mes("выполнили!!");
    
    // Quit
    $app->quit();
    

    Скрипт написан 16.07.2012 в Human Emulator 4.4.19 Advanced.
    Скрипт исправлен 08.04.2013 в Human Emulator 4.6.5 Advanced.

    скачать скрипт

    Скрипт Human Emulator сборщик прокси с hidemyass.com

    Этот скрипт собирает прокси с сайта hidemyass.com.

    Скрипт достаточно простой. Перед сбором скрипт выставляет нужные галочки в настройках листа с прокси и нажимает обновить. В итоге мы имеем лист с прокси или socks, который и парсим в заданный в настройках скрипта файл. Единственный момент, который несколько усложнил скрипт это скрытые строки в поле ip. Эти строки пришлось вырезать и удалять лишнее.

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

    delete($path_proxies);
    
    // navigate to proxy site  
    $browser->navigate("http://hidemyass.com/proxy-list/");
    
    // get socks or proxy 
    $checkbox->check_by_number(2,!$b_get_socks);
    $checkbox->check_by_number(3,!$b_get_socks);
    $checkbox->check_by_number(4,$b_get_socks);
    
    // Anonymity level
    $checkbox->check_by_number(5,false);
    $checkbox->check_by_number(6,false);
    $checkbox->check_by_number(7,false);
    $checkbox->check_by_number(8,true);
    $checkbox->check_by_number(9,true);
    $checkbox->check_by_number(10,false);
    
    // Speed and Connection time
    $checkbox->check_by_number(11,false);
    $checkbox->check_by_number(12,false);
    $checkbox->check_by_number(13,true);
    $checkbox->check_by_number(14,false);
    $checkbox->check_by_number(15,false);
    $checkbox->check_by_number(16,true);
    
    // upgrades
    $button->click_by_name("updateresults");
    
    // get all proxy to file
    get_proxy_list();
    
    // Quit
    $app->quit();
    ?>
    

    Скрипт написан 11.03.2012 Human Emulator 4.4.9 Advanced.
    Скрипт обновлён 11.08.2012
    Скрипт обновлён 10.04.2013

    скачать скрипт

    Cкрипт Human Emulator сбора ключевых слов из meta keywords сайтов из выдачи Яндекс

    Это скрипт аналогичен скрипту Cкрипт Human Emulator сбора ключевых слов из meta kyewords единственное отличие между ними этот скрипт написан под выдачу Яндекс, а предыдущий разбирает выдачу Google.

    Скрипт работает следующим образом: вбивается поисковый запрос в yandex. Далее скрипт идёт по поисковой выдаче и собирает meta keywords со всех страниц, которые попали в выдачу по этому запросу.Все слова записываются в файл с названием в виде запроса. В конце обработки запроса скрипт сортирует слова и убирает дубликаты из файла. Затем берёт следующий запрос и всё по новой. И так до тех пор пока не закончатся поисковые запросы. В результате мы имеем текстовые файлы с ключевыми словами.

    Скрипт на вход принимает файл с поисковыми запросами в формате:

    сбор meta keywords
    сбор кеев meta
    сбор мета keywords
    и т.д.

    В результате работы скрипта имеем текстовые файлы, например: сбор meta keywords.txt,сбор кеев meta.txt и т.д. в формате:
    оптимизация
    оптимизация страниц сайта
    паетки
    пластик
    пластика
    подбор запросов для продвижения
    подвеска
    поисковая
    поисковая выдача
    поисковые запросы
    поисковые системы
    и т.д.

    Настройки скрипта:

    // путь к файлу c запросами
    $path_to_data = "data/keywords.txt";
    // папка с результатами
    $path_to_res = "res/";
    
    // глубина прохода в поисковые результаты
    $cnt_pages = 10;
    

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

    quit();
    // пробежимся по всем ключевым словам
    foreach($arr_of_kwds as $key=>$kwd)
    {
    	$kwd = trim($kwd);
    	if ($kwd == "")
    	{
    		continue;
    	}
       // go to yandex	
       $browser->navigate("http://www.yandex.ua/");
    	sleep(2);
    	
    	// задаём слово в поиск
    	$input->set_focus_by_name("text");
    	$input->set_value_by_name_by_form_name("text", $kwd, "form");
       
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32, true);
    	// нажать enter
       $keyboard->send_key(13,true);
    	sleep(3);
    
    	// обнулим перед следующим проходом
    	$crnt_page = 1;
    	// работаем с ключевым словом на заданную длину
    	while (true)
       {
    		// получим все ссылки на сайты заключённые в префиксах
    		$sites = $webpage->get_body_inter_prefix_all('

    ', '

    '); $sites = explode("
    ", $sites); // пройдёмся по всем полученным ссылкам for($i = 0; $i < count($sites); $i++) { $pr1 = 'href="'; $pr2 = '"'; $site = get_string($sites[$i], $pr1, $pr2); if ($site == "") continue; // разобрать ключи в файл parse_yandex($site,$kwd); sleep(2); } // организация перехода на следующую страницу if(!next_page($crnt_page)) { // убираем строки-дубликаты из файла после прохождения всех страниц $textfile->dedupe($path_to_res.$kwd.".txt", $path_to_res.$kwd.".txt", 60); sleep(3); break; } } } debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу
    "); // Quit $app->quit(); ?>

    Скрипт написан 17.03.2013 в Human Emulator 4.6.5 Advanced.

    скачать скрипт

    Cкрипт Human Emulator сбора ключевых слов из meta keywords сайтов

    Не смотря на споры, которые ведутся вокруг того нужно или не нужно прописывать meta keywords на страницах своего сайта, очень много вебмастеров заполняют эти тэги нормальными ключевыми словами, по которым они хотели бы попасть в топ поисковой выдачи. Мы предлагаем вашему вниманию скрипт, который собирает эти ключевые слова.

    Скрипт работает следующим образом: вбивается поисковый запрос в google. Далее скрипт идёт по поисковой выдаче и собирает meta keywords со всех страниц, которые попали в выдачу по этому запросу.Все слова записываются в файл с названием в виде запроса. В конце обработки запроса скрипт отсортировывает слова и убирает дубликаты из файла. Затем берёт следующий запрос и всё по новой. И так до тех пор пока не закончатся поисковые запросы. В результате мы имеем текстовые файлы с ключевыми словами.

    Скрипт на вход принимает файл с поисковыми запросами в формате:

    сбор meta keywords
    сбор кеев meta
    сбор мета keywords
    и т.д.

    В результате работы скрипта имеем текстовые файлы, например: сбор meta keywords.txt,сбор кеев meta.txt и т.д. в формате:

    оптимизация
    оптимизация страниц сайта
    паетки
    пластик
    пластика
    подбор запросов для продвижения
    подвеска
    поисковая
    поисковая выдача
    поисковые запросы
    поисковые системы
    и т.д.

    Настройки скрипта:

    // путь к файлу c запросами
    $path_to_data = "data/keywords.txt";
    // папка с результатами
    $path_to_res = "res/";
    
    // глубина прохода в поисковые результаты
    $cnt_pages = 10;
    

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

    $kwd)
    {
    	$kwd = trim($kwd);
    	if ($kwd == "")
    	{
    		continue;
    	}
       // перейти на гугль	
       $browser->navigate("google.com");
    	sleep(2);
    	
    	// задаём слово в поиск
       $input->set_value_by_name("q", $kwd);
       $input->click_by_name("q");
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32, true);
    	// нажать enter
       $keyboard->send_key(13,true);
    	sleep(3);
     
       // обнулим перед следующим проходом
    	$crnt_page = 1;
    
    	// работаем с ключевым словом на заданную длину
    	while (true)
       {
    		// получим все ссылки на сайты заключённые в префиксах
    		$sites = $webpage->get_body_inter_prefix_all('

    ', '

    '); $sites = explode("
    ", $sites); // пройдёмся по всем полученным ссылкам for($i = 0; $i < count($sites); $i++) { // получить ссылку на сайт $pr1 = 'href="'; $pr2 = '">'; $site = get_string($sites[$i], $pr1, $pr2); if ($site == "") continue; // вывод в панель отладки debug_mess("ссылка на сайт : ".$site); // записать найденные ключи в файл get_meta_kw($site,$kwd); sleep(2); } // организация перехода на следующую страницу if(!next_page($crnt_page)) { // убираем строки-дубликаты из файла $textfile->dedupe($path_to_res.$kwd.".txt", $path_to_res.$kwd.".txt", 60); sleep(3); break; } } } debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу
    "); // Quit $app->quit(); ?>

    Скрипт написан 1.03.2013 в Human Emulator 4.6.5 Advanced.

    скачать скрипт

    Скрипт Human Emulator сборщик WordPress сайтов

    Если вы столкнулись с задачей сбора базы сайтов на движке WordPress, то вам пригодится наше решение. Скрипт, собирающий WordPress сайты в кратчайшие сроки соберет вам актуальную базу автоматически и без вашего участия. Вы получите лишь готовый результат без трудозатрат.

    Скрипт работает следующим образом: берёт ключи из файла с поисковыми фразами и вводит их в поле поиска google. Затем разбирает поисковые результаты Google на ссылки. Переходит по ссылкам и проверяет действительно это WordPress или нет. Если сайт прошёл проверку добавляет его в наш список WordPress сайтов. В конце скрипт удаляет дубликаты из списка. И у вас на руках уникальная база WordPress сайтов. С помощью добавления в скрипт дополнительных проверок вы сможете отфильтровать список для ваших целей.

    На входе скрипт принимает файл с поисковыми фразами в формате:

    /wp-admin/
    /wp-admin/ seo
    /wp-admin/ ceo
    /wp-admin/ sites
    wordpress сайты

    На выходе получаем файл со списком WP сайтов в формате:

    wordpress.org
    fr.wordpress.org
    t-prod.net
    wordpress.buldozer.fr
    wp-admin.org.ua
    wordpresso.org
    nerdfrat.com
    fr.forums.wordpress.com
    … и т.д.

    Настройки скрипта:

    
    // файл с данными для скрипта
    $keys = file("data/keys.txt");
    // файл с результатами
    $res_path="res/wp_sites.txt";
    // глубина прохода в поисковые результаты
    // со скольких страниц собирать ссылки прежде чем перейти к следующему запросу
    // если нужно собирать все ссылки надо просто задать этот параметр =  -1
    $cnt_pages = 30;
    

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

    set_default_authorization("","");
    
    // создать второй браузер
    $browser->set_count(2);
    // удалим дубликаты в результирующем файле
    dedupe($res_path);
    // кол-во
    for($ii=0;$iinavigate("google.com");
    
       // задаём слово в поиск
       $input->set_value_by_name("q",$key);
       $input->click_by_name("q");
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32,true);
    
       // нажать enter
       $keyboard->send_key(13,true);
    
    	// ждём
    	sleep(1);
     
       // обнулим перед следующим проходом
    	$crnt_page=1;
    	
       while(true)
       {
    		 // получим все ссылки на сайты заключённые в тэгах 
    		 $sites=$webpage->get_body_inter_prefix_all("","");
    		 $sites=explode("
    ",$sites); $browser->set_active_browser(1); // пройдёмся по всем полученным ссылкам for($i=0;$i","",trim($sites[$i])); $site=str_replace("
    ","",$site); if($site=="") continue; // вывод в панель отладки debug_mess("ссылка на сайт : ".$site); // проверить найденный сайт это wp или нет check_wp($site); } // сделать активным главный $browser->set_active_browser(0); // не перешли на следующую страницу if(!next_page($crnt_page)) break; } // удалим дубликаты в файле с результатами dedupe($res_path); } debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу"); // Quit $app->quit(); ?>

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

    скачать скрипт

    Скрипт Human Emulator парсер поисковой выдачи mail.ru

    Ещё один парсер выдачи поисковых результатов пополнил нашу коллекцию парсеров. На этот раз это парсер Маил.ру.
    Это скрипт, который как и предыдущие парсеры демонстрирует как можно разобрать поисковую выдачу теперь на примере mail.ru.

    Скрипт работает следующим образом: берём ключи из файла с поисковыми фразами и вводим их в поле поиска mail.ru.
    Затем разбираем поисковую выдачу маил.ру на ссылки.

    Этот скрипт так же является заготовкой под любой ваш скрипт, который будет работать с выдачей Mail.ru.
    Диапозон его применения аналогичен трём предыдущим парсерам поисковой выдачи: парсеру Яндекса и парсеру Гугла и парсеру Рамблер

    На входе скрипт принимает файл с поисковыми фразами в формате:
    human emulator
    парсер human emulator
    парсер mail.ru xhe
    xhe парсер
    mail.ru parser

    Настройки скрипта:

    
    // файл с данными для скрипта
    $keys = file("data/keys.txt");
    
    // глубина прохода в поисковые результаты 
    // со скольких страниц собирать товары прежде чем перейти к следующему
    // если нужно собирать все товары надо просто задать этот параметр =  -1
    $cnt_pages = 10;
    

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

    navigate("mail.ru");
    
      // задаём слово в поиск
       $input->set_value_by_name("q",$key);
       $input->click_by_name("q");
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32,true);
    
       // нажать enter
       $keyboard->send_key(13,true);
    
    	// ждём
    	sleep(1);
       // обнулим перед следующим проходом
    	$crnt_page=1;
    
       while(true)
       {
    		 // получим все ссылки на сайты заключённые в тэгах 
    		 $sites=$webpage->get_body_inter_prefix_all("");
    		 $sites=explode("
    ",$sites); // пройдёмся по всем полученным ссылкам for($i=0;$iquit(); ?>

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

    скачать скрипт

    Cкрипт Human Emulator парсер поисковой выдачи Рамблера

    Мы решили дополнить свою коллекцию парсеров выдачи поисковых машин ещё одним и представляем вашему вниманию парсер Рамблера.
    Это скрипт, работает аналогично двух предыдущим парсерам:Яндекса и Гугл.

    Скрипт берёт ключи из файла с поисковыми фразами и вводим их в поле поиска на сайте rambler.ru. Затем разбирает поисковую выдачу Rambler на ссылки. Эти ссылки выводит в окно отладки для наглядности работы скрипта.

    Как и предыдущие скрипты этот скрипт является заготовкой под любой ваш скрипт, который будет работать с выдачей Rambler.

    На входе скрипт принимает файл с поисковыми фразами в формате:

    human emulator
    парсер human emulator
    парсер рамблер xhe
    xhe парсер
    rambler parser

    Настройки скрипта:

    
    // файл с данными для скрипта
    $keys = file("data/keys.txt");
    
    // глубина прохода в поисковые результаты 
    // со скольких страниц собирать товары прежде чем перейти к следующему
    // если нужно собирать все товары надо просто задать этот параметр =  -1
    $cnt_pages = 10;
    

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

    navigate("rambler.ru");
    
       // задаём слово в поиск
       $input->set_value_by_name("query",$key);
       $input->click_by_name("query");
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32,true);
    
       // нажать enter
       $keyboard->send_key(13,true);
    
    	// ждём
    	sleep(1);
       // обнулим перед следующим проходом
    	$crnt_page=1;
    
       while(true)
       {
    		 // получим все ссылки на сайты заключённые в тэгах 
    		 $sites=$webpage->get_body_inter_prefix_all("b-serp__list_item_title","");
                     // получим массив ссылок из строки 
    		 $sites=explode("
    ",$sites); // пройдёмся по всем полученным ссылкам for($i=0;$iquit(); ?>

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

    скачать скрипт

    Скрипт Human Emulator парсер поисковой выдачи Google

    Скрипт парсер Гугл. Это скрипт, который демонстрирует как можно разобрать поисковую выдачу Гугл.

    Скрипт работает следующим образом: берём ключи из файла с поисковыми фразами и вводим их в поле поиска google.
    Затем разбираем поисковые результаты Google на ссылки.

    Этот скрипт является заготовкой под любой ваш скрипт, который будет работать с выдачей Гугл. Этот скрипт может быть использован
    например, для определения позиции вашего сайта в поисковых результатах Google по заданному ключевому запросу или для того что бы получить списки сайтов,
    которые по этому запросу находятся в топ-10, топ-20, топ-30 и т.д. Можно собирать базы сайтов заданного движка — dle сайты,каталоги, word press сайты и т.д.

    На входе скрипт принимает файл с поисковыми фразами в формате:
    human emulator
    парсер human emulator
    парсер гугль xhe
    xhe парсер
    google parser

    Настройки скрипта:

    
    // файл с данными для скрипта
    $keys = file("data/keys.txt");
    
    // глубина прохода в поисковые результаты 
    // со скольких страниц собирать товары прежде чем перейти к следующему
    // если нужно собирать все товары надо просто задать этот параметр =  -1
    $cnt_pages = 10;
    

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

    navigate("google.com");
    
       // задаём слово в поиск
       $input->set_value_by_name("q",$key);
       $input->click_by_name("q");
       // нажмём пробел для отключения всплывшей подсказки
       $keyboard->send_key(32,true);
    
       // нажать enter
       $keyboard->send_key(13,true);
    
    	// ждём
    	sleep(1);
       // обнулим перед следующим проходом
       $crnt_page=1;
    	
       while(true)
       {
    		 // получим все ссылки на сайты заключённые в тэгах 
    		 $sites=$webpage->get_body_inter_prefix_all("","");
    		 $sites=explode("
    ",$sites); // пройдёмся по всем полученным ссылкам for($i=0;$i","",trim($sites[$i])); $site=str_replace("","",$site); if($site=="") continue; // вывод в панель отладки debug_mess("ссылка на сайт : ".$site); /* *** тут что то делаем с полученными из гугл сайтами * */ } // не перешли на следующую страницу if(!next_page($crnt_page)) break; } } // Quit $app->quit(); ?>

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

    скачать скрипт