Реклама на сайте Advertise with us

Нужно переписать парсер гугла.

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 27.02.04
Сообщения: 926
Рейтинг: 47

Ссылка на сообщениеДобавлено: 18/11/06 в 12:56       Ответить с цитатойцитата 

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

p.s.: скрипт на пёрле написан.

оставляйте аськи здесь.

0
 



С нами с 16.11.06
Сообщения: 10
Рейтинг: 10

Ссылка на сообщениеДобавлено: 18/11/06 в 13:06       Ответить с цитатойцитата 

388495163

0
 



С нами с 26.10.02
Сообщения: 151
Рейтинг: 148

Ссылка на сообщениеДобавлено: 18/11/06 в 13:33       Ответить с цитатойцитата 

удали в скрипте <p class=g> и будет счастие ;)

3
 



С нами с 27.02.04
Сообщения: 926
Рейтинг: 47

Ссылка на сообщениеДобавлено: 18/11/06 в 18:48       Ответить с цитатойцитата 



Респект, thanx icon_smile.gif

0
 

форумъ сдохъ

С нами с 01.10.04
Сообщения: 4621
Рейтинг: 481

Ссылка на сообщениеДобавлено: 10/12/06 в 18:41       Ответить с цитатойцитата 

бля... у меня в скрипте используется парсер гугла. сейчас глянул, а не пашет скрипт. там, где результаты парсинга должны быть пусто. и <p class=g> в парсеере не нашел.
Код:
   /**
   * Удаление всех ненужных тегов из $text
   * @param $text string Код html
   * @return string
   */
   function cleanUp($text) {
      $text = preg_replace("/<span\s+dir=ltr.+/si", "", $text);
      $text = preg_replace("/\sclass=[^\s>]+\s/si", " ", $text);         
      $text = preg_replace("/\sclass=[^\s>]+>/si", ">", $text);         
      
      return preg_replace(
         "/<table[^>]*>|<\/table>"
         . "|<br[^>]*>"
         . "|<p[^>]*>|<\/p>"
         . "|<tbody[^>]*>|<\/tbody>"
         . "|<thead[^>]*>|<\/thead>"
         . "|<th[^>]*>|<\/th>"
         . "|<td[^>]*>|<\/td>"
         . "|<tr[^>]*>|<\/tr>/si", " ", $text);      
   }
   
   /**
   * Инициализирует массив ссылок на страницы результата запроса
   * Для других поисковиков переопределяется   
   * @return boolean
   */
   function initPagesLinks() {
      $match = array();
      $pattern = "/<div\s+class=n>(.+?)<\/div>/si";
      if (!preg_match($pattern, $this->pageContent, $match)) {         
         return false;
      }      
      $html = @html_doc($match[1]);
      $links = $html->get_elements_by_tagname("a");
      for ($i = 0; $i < sizeof($links); $i++) {         
         $this->pagesLinks[] = $links[$i]->get_attribute("href");   
      }
      // Сохранить урл последней ссылки
      if (sizeof($links) > 0) {
         $this->lastPageUrl = $this->pagesLinks[sizeof($links) - 1];
      }
      
      return true;
   }
   
   /**
   * Проверка - последняя страница результатов   
   * @param $num string Номер ссылки (начинаются с нуля)
   * @return boolean
   */
   function isLastPage($url) {
      return (strcmp($this->lastPageUrl, $url) == 0);
   }

   /**
   * Добавление в массив items данных из полученной страницы
   * Для других поисковиков переопределяется   
   * @return boolean
   */
   function initItems() {            
      $matches = array();            
      $pattern = "/<p[^>]*>(.+?)<font[^>]*>(.+?)<font[^>]*>/si";
      if (!preg_match_all($pattern, $this->pageContent, $matches, PREG_SET_ORDER)) {
         return false;
      }      
      
      $newItemsCount = 0;
      $pattern = "/onmousedown=\"[^\"]+\"/i";      
      for ($i = 0; $i < sizeof($matches); $i++) {         
         if (isset($matches[$i][1])) {
            if (strpos($matches[$i][1], "<hr class=z>") !== false
               || strpos($matches[$i][2], "<a href=") !== false         
               || strpos($matches[$i][0], "[PDF]") !== false) continue;            
            
            $desc = trim($this->cleanUp($matches[$i][2]));            
            if (strlen($desc) < $this->minTextLen) continue;            
            
            $link = $this->cleanUp(preg_replace($pattern, "", $matches[$i][1]));            
            if (preg_match("/href=\"([^\">]+)\"/i", $link, $linkMatches)) {
               $url = trim($linkMatches[1]);
            }
            else {
               $url = "";
            }
            $link = preg_replace("/<a[^>]+>|<\/a>/si", "", $link);                        
            //$link = trim(strip_tags(html_entity_decode($link)));
            //$desc = trim(strip_tags(html_entity_decode($desc)));
            $link = trim(html_entity_decode(strip_tags($link)));
            $desc = trim(html_entity_decode(strip_tags($desc)));
            
            if (strlen($url) > 0 && strlen($link) > 0 && strlen($desc) > 0) {
               $this->items[] = array($url, $link, $desc);
               $newItemsCount++;
            }
         }      
      }      
      
      return ($newItemsCount > 0);
   }
   
   /**
   * Возвращает урл ссылки на результат запроса
   * @param $num integer Номер ссылки (начинаются с нуля)
   * @return string
   */
   function getPageLink($num) {                  
      $this->lastUrl = $this->getUrl() . "&start=" . ($num * 100);      
      return $this->lastUrl;      
   }   
      
   /**
   * Инициализирует содержимое страницы
   * @param $num integer Номер ссылки (начинаются с нуля)   
   */
   function getPageContent($num = -1) {
      $hConn = curl_init();            
      if ($num >= 0) {
         // Возвращает указаную страницу запроса
         curl_setopt($hConn, CURLOPT_URL, $this->getPageLink($num));
      }      
      else {
         // Возвращает первую страницу запроса
         curl_setopt($hConn, CURLOPT_URL, $this->getUrl());         
      }      
      curl_setopt($hConn, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($hConn, CURLOPT_FOLLOWLOCATION, 1);      
      // Использовать прокси, если задан
      if (isset($this->proxy) > 0) {
         curl_setopt($hConn, CURLOPT_PROXY, $this->proxy);                  
      }      
      $this->pageContent = curl_exec($hConn);
      curl_close($hConn);
   }
   
   /**
   * Инициализирует items по запросу
   * @param $query string запрос для поисковика
   * @param $limit integer кол-во элементов из результата запроса
   */
   function getContent($query, $limit = 10) {
      $this->items = array();
      $this->baseQuery = $query;      
      if ($limit == SITES_UNLIMITED) {
         $limit = 1000;
      }
      $this->resultsNum = $limit;
      $this->maxItemsNum = min(100, $limit);
      $this->pagesNum = ceil($this->resultsNum / $this->maxItemsNum);
            
      $this->getPageContent();
      if (strlen($this->pageContent) == 0) {
         return new PEAR_Error("Can't load first page from search engine");
      }            
      // Попытки запроса, пока не будет получен результат      
      $i = 0;
      $res = $this->initItems();
      while (!$res && $i < $this->maxTryQuery) {
         $this->getPageContent();
         $res = $this->initItems();         
         $i++;
      }
      if (!$res) {
         return new PEAR_Error("Can't load data from search engine");   
      }
         
      // Если результат на нескольких страницах - обработка страниц
      for ($i = 1; $i <= $this->pagesNum; $i++) {
         $this->getPageContent($i);
         if (!$this->initItems()) break;               
         
         $this->initPagesLinks();
         if ($this->isLastPage()) break;
      }
      
      return true;
   }   
   
}

?>


не вижу я там там <p class=g>, тыкните носом

0
 

ГДЕ, СУКА, САЙНЫ?

С нами с 17.03.06
Сообщения: 3984
Рейтинг: 3320

Ссылка на сообщениеДобавлено: 10/12/06 в 23:05       Ответить с цитатойцитата 

ищи так:
Цитата:

<p

sponsors and tradesНадежный ХостингXXX Toplists

0
 

форумъ сдохъ

С нами с 01.10.04
Сообщения: 4621
Рейтинг: 481

Ссылка на сообщениеДобавлено: 10/12/06 в 23:53       Ответить с цитатойцитата 

и что?

0
 

ГДЕ, СУКА, САЙНЫ?

С нами с 17.03.06
Сообщения: 3984
Рейтинг: 3320

Ссылка на сообщениеДобавлено: 10/12/06 в 23:56       Ответить с цитатойцитата 

найди это:

Цитата:

$pattern = "/<p[^>]*>(.+?)<font[^>]*>(.+?)<font[^>]*>/si";

sponsors and tradesНадежный ХостингXXX Toplists

0
 

форумъ сдохъ

С нами с 01.10.04
Сообщения: 4621
Рейтинг: 481

Ссылка на сообщениеДобавлено: 11/12/06 в 00:33       Ответить с цитатойцитата 

спасибо большое! ;) smail04.gif

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор сайта

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »