Парсер Гугль

Сбор и анализ всего что можно собрать из сети.
Ответить
Аватара пользователя
RomanZhilin
Сообщения: 3
Зарегистрирован: 10 окт 2017, 13:30

Парсер Гугль

Сообщение RomanZhilin » 10 окт 2017, 13:37

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

обработали все страницы 1
обработали все страницы 1
обработали все страницы 1
обработали все страницы 1
обработали все страницы 1

Помогите разобраться новичку.

скрипт
<?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");

// //////////////////////// настройки скрипта /////////////////////////
// файл с данными для скрипта
$keys = file("data/keys.txt");

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

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

// //////////////////////// дополнительные модули ///////////////
// функции 
require_once("functions.php");

// /////////////////////// скрипт ///////////////////////////////////////////
// кол-во
for($ii=0;$ii<count($keys);$ii++)
{
	// получить запрос
	$key = trim($keys[$ii]);

   // перейти на гугль	
   $browser->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)
   {
		 // получим все ссылки на сайты заключённые в тэгах <cite>
		 $sites=$webpage->get_body_inter_prefix_all("<cite>","</cite>");
		 $sites=explode("<br>",$sites);
	    // пройдёмся по всем полученным ссылкам
		 for($i=0;$i<count($sites);$i++)
		 {        
			// переходим на сайт
			$site=str_replace("<b>","",trim($sites[$i]));
			$site=str_replace("</b>","",$site);
			if($site=="")
			  continue;
			// вывод в панель отладки
			debug_mess("ссылка на сайт : ".$site);
	
			/* ***
				тут что то делаем с полученными из гугль сайтами 
			* */
		 }

		 // не перешли на следующую страницу 
		if(!next_page($crnt_page)) 
		  break;
  }

}

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

Аватара пользователя
xscripts
Сообщения: 80
Зарегистрирован: 24 янв 2012, 12:48
Контактная информация:

Re: Парсер Гугль

Сообщение xscripts » 12 окт 2017, 00:13

Вот в этом месте идёт разбор поисковой выдачи.
// получим все ссылки на сайты заключённые в тэгах <cite>
		 $sites=$webpage->get_body_inter_prefix_all("<cite>","</cite>");
		 $sites=explode("<br>",$sites);

Кусок содержащий ссылку на страницу во Free версии выглядит

<cite class="_Rm">https://xn--80awbbeioodeq4h3a.xn--p1ai/parser_grabb ... .php</cite>

Соответственно, скрипт не будет находить нужные нам куски. Для того что бы это исправить нужно переделать код следующим образом:

$sites=$webpage->get_body_inter_prefix_all("<cite ","cite>");

то есть на выходе у нас будет следующий результат:

class="_Rm">https://xn--80awbbeioodeq4h3a.xn--p1ai/parser_grabber_sbor.php</

теперь для того что бы избавиться от лишнего вырежем нужный кусок с помощью функции get_string, которая есть в файле functions.php.

в итоге у нас получиться следующий код:

while(true)
   {
		 // получим все ссылки на сайты заключённые в тэгах <cite>
		 $sites=$webpage->get_body_inter_prefix_all("<cite ","cite>");
		 $sites=explode("<br>",$sites);
	    // пройдёмся по всем полученным ссылкам
		 for($i=0;$i<count($sites);$i++)
		 {        
			// переходим на сайт
			$site=str_replace("<b>","",trim($sites[$i]));
			$site=str_replace("</b>","",$site);

                        // вырезаем лишнее
                        $site=get_string($site, ">","</");
			if($site=="")
			  continue;
			// вывод в панель отладки
			debug_mess("ссылка на сайт : ".$site);
	
			/* ***
				тут что то делаем с полученными из гугль сайтами 
			* */
		 }

		 // не перешли на следующую страницу 
		if(!next_page($crnt_page)) 
		  break;
  }



Для того чтобы убрать проблему с перелистыванием страниц с результатами нужно подправить функцию next_page(&$crnt_page), которая находиться в файле functions.php. Во free версии клик на следующую страницу выглядит как:

$anchor->click_by_inner_text("
2",false); 
то есть имеет перенос строки перед цифрой. Правим функцию и получаем:
// следующая страница
function next_page(&$crnt_page)
{
      global $anchor, $browser, $app,$cnt_pages;
      // количество поисковых страниц
      $crnt_page=$crnt_page+1;

      if($cnt_pages!=-1)
      {
            // останавливаем скрипт
            if($crnt_page>$cnt_pages)
            { 
              debug_mess("обработали все заданные страницы ".($crnt_page-1));
              return false;
            }
      }
      // перейдём на следующую страницу с результатами
$bclick = $anchor->click_by_inner_text("
".$crnt_page,true);

      if($bclick===false)
      {
           debug_mess("обработали все страницы ".($crnt_page-1));
           return false;
      }

      debug_mess("обработали страницу ".($crnt_page-1));
      return true;
}
http://x-scripts.com/

Код: Выделить всё

<?php
$xhe_host ="127.0.0.1:7010";

require("../Templates/xweb_human_emulator.php");

$browser->navigate("http://x-scripts.com");

$app->quit();?>

Аватара пользователя
RomanZhilin
Сообщения: 3
Зарегистрирован: 10 окт 2017, 13:30

Re: Парсер Гугль

Сообщение RomanZhilin » 19 окт 2017, 13:38

Спасибо разобрался. Теперь мучаю ваш парсер Яндекса. )

Ответить