Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Про парсер

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
antobra
Отправлено: 07 Апреля, 2011 - 11:26:37
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




Приветствую!

Друзья, подскажите в чем может быть проблема. Написал несколько парсеров под разные сайты и все отлично. Но тут столкнулся с одним и он на овтеты парсера отвечает очень долго, что мой сервер отвечает "504 Gateway Time-out". Причем если открывать данный сайт в браузере, то он летает пулей! А через парсеры - очееень долго.

Использовал curl и simple html dom. И там и там одно и то же. Скажите в чем может быть дело. С меню плюсики в карму)
 
 Top
EuGen Администратор
Отправлено: 07 Апреля, 2011 - 11:33:52
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




504 - это означает, что ответ бекенда сервера, обрабатывающего запрос, был слишком долгим (например, когда apache отрабатывает за проксирующим nginx).
Далее, веб-сайт может отслеживать то, что его запрашивает парсер (например, браузер отсылает такие вещи, как HTTP_USER_AGENT и т.п.) и пресекать попытки забрать контент. Правда, реагировать долгим ответом - оригинальный способ (но действенный)
В Вашем случае, соответственно, нужно попробовать "представиться браузером" - высылая все заголовки, что обычно шлет браузер. Возможно, дело в этом.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2011 - 11:34:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Возможно, для этого сайта вы не похожи на пользователя.


-----
PostgreSQL DBA
 
 Top
antobra
Отправлено: 07 Апреля, 2011 - 11:42:30
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




Я использую вот такое:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class BotLib {
  4.        
  5.         var $curl;
  6.        
  7.         /*
  8.          * CURL options for session
  9.          */
  10.         var $userAgent;
  11.         var $contentEncoding;
  12.         var $connectTimeout;
  13.         var $followLocation;
  14.         var $returnTransfer;
  15.         var $cookieFile;
  16.         var $cookieSession;
  17.        
  18.         public function __construct() {
  19.                 if(!$this->curl = curl_init()) {
  20.                         $this->_crash("Can't initialize CURL library!");
  21.                 }              
  22.         }
  23.        
  24.         public function setCurlOptions($userAgent       = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
  25.                                                                       $contentEncoding = 'gzip,deflate',
  26.                                                                       $connectTimeout  = 100,
  27.                                                                       $followLocation  = true,
  28.                                                                       $returnTransfer  = true,
  29.                                                                       $cookieFile      = 'cookiefile',
  30.                                                                       $cookieSession   = true) {
  31.                 $this->userAgent       = $userAgent;
  32.                 $this->contentEncoding = $contentEncoding;
  33.                 $this->connectTimeout  = $connectTimeout;
  34.                 $this->followLocation  = $followLocation;
  35.                 $this->returnTransfer  = $returnTransfer;
  36.                 $this->cookieFile      = $cookieFile;
  37.                 $this->cookieSession   = $cookieSession;                               
  38.         }
  39.        
  40.         public function _getRequest($url) {
  41.                 curl_setopt($this->curl, CURLOPT_URL,            $url);
  42.                 curl_setopt($this->curl, CURLOPT_COOKIESESSION,  $this->cookieSession);
  43.                 curl_setopt($this->curl, CURLOPT_COOKIEFILE,     $this->cookieFile);
  44.                 curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, $this->returnTransfer);
  45.                 curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, $this->followLocation);
  46.                 curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
  47.                 curl_setopt($this->curl, CURLOPT_ENCODING,       $this->contentEncoding);
  48.                 curl_setopt($this->curl, CURLOPT_USERAGENT,      $this->userAgent);
  49.                
  50.                 if($a = curl_exec($this->curl)){
  51.                         return $a;
  52.                 } else {
  53.                         return false;
  54.                 }
  55.         }
  56.        
  57.         public function _postRequest($url, $params) {
  58.                 curl_setopt($this->curl, CURLOPT_URL,            $url);
  59.                 curl_setopt($this->curl, CURLOPT_USERAGENT,      $this->userAgent);
  60.                 curl_setopt($this->curl, CURLOPT_POST,           TRUE);
  61.                 curl_setopt($this->curl, CURLOPT_COOKIESESSION,  $this->cookieSession);
  62.                 curl_setopt($this->curl, CURLOPT_COOKIEFILE,     $this->cookieFile);
  63.                 curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, $this->returnTransfer);
  64.                 curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, $this->followLocation);
  65.                 curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
  66.                 curl_setopt($this->curl, CURLOPT_ENCODING,       $this->contentEncoding);
  67.                 curl_setopt($this->curl, CURLOPT_POSTFIELDS,     $params);
  68.                
  69.                 if($a = curl_exec($this->curl)){
  70.                         return $a;
  71.                 } else {
  72.                         return false;
  73.                 }              
  74.         }      
  75.  
  76. }
  77.  
  78.  
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2011 - 11:51:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




ммм, момент
Нет, не вижу в классе криминала никакого, меня с толку сбил ваш метод setCurlOptions.
Ловите заголовки, которыми обмениваются браузер с этим сайтом и смотрите, что не совпадает.

(Отредактировано автором: 07 Апреля, 2011 - 11:59:33)



-----
PostgreSQL DBA
 
 Top
antobra
Отправлено: 07 Апреля, 2011 - 12:04:57
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




А не может усложнять работу всякие там системы типа Google Аналитикс... Т.к. когда открывается этот сайт вся страница загружается, а потом минуту другую браузер пишет, что загружается аналитикс...
Может быть в этом дело?

Хотя парсится в htmlе.... (((
 
 Top
movEAX
Отправлено: 07 Апреля, 2011 - 16:26:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Подсмотрите сниффером какие заголовки шлет браузер, и отошлите точно такие же, проблем возникнуть не должно. Если есть какие-то специфические заголовки, то воспользуйтесь CURLOPT_HTTPHEADER.
И еще, посмотрите в сторону curl_setopt_array..


-----
армия.. самое убогое место
 
 Top
antobra
Отправлено: 09 Апреля, 2011 - 16:27:47
Post Id


Посетитель


Покинул форум
Сообщений всего: 327
Дата рег-ции: Окт. 2010  


Помог: 1 раз(а)




Помогите еще с ошибкой - 504 Gateway Time-out.

У меня свой сервер и я изменил продолжительность работы php с 30 секунд до 500 и все равно эта ошибка... причем она показывается через 5-7 секунд. Это как понимать?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB