Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И ещё раз парсинг, стопорится 
:(
    Опции темы
fraer
Дата 20.3.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Ищу дома в Дании. Парсинг сайта DanBolig. В цикле хочу получить все страницы: 
Код

http://danbolig.dk/SoegBolig/Resultatsider/Soegeresultat.htm?&selectedpropertytypeid=2&page=1
http://danbolig.dk/SoegBolig/Resultatsider/Soegeresultat.htm?&selectedpropertytypeid=2&page=2
...
http://danbolig.dk/SoegBolig/Resultatsider/Soegeresultat.htm?&selectedpropertytypeid=2&page=21
...
пока есть дома

Но где-то на 6-8 странице скрипт умирает. MAX_EXECUTION_TIME поставил большой. Подскажите, в чём может быть проблема. Страницу получаю через сокеты.
PM MAIL   Вверх
mishaSL
Дата 20.3.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



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


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
fraer
Дата 21.3.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Код

<?php

ini_set("max_execution_time", "300000");

function GetHousesFromDanBolig($p) {
  $types = array(2);
  $url = "http://danbolig.dk/SoegBolig/Resultatsider/Soegeresultat.htm?&selectedpropertytypeid=";
  $houses = array();
  $hi = 0;
  foreach ($types as $key => $v) {
    $page = $p;
    $r = new HTTPRequestGET($url.$v."&page=".$page);
    $text = $r->DownloadToString();
    $pattern = "|[^<]*<tr[^>]*>[^<]*<td[^>]*>[^<]*<span[^>]*>([^<]*)</span[^>]*>[^<]*</td[^>]*>[^<]*</tr[^>]*>|isU";
    $regions_count = preg_match_all($pattern, $text, $regions);
    if ($regions_count == 0) break;
    $poss = array();
    for ($i = 0; $i < $regions_count; $i++)
      $poss[] = strpos($text, $regions[1][$i]);
    $poss[] = strlen($text);


    for ($i = 0; $i < $regions_count; $i++) $regions[0][$i] = substr($text, $poss[$i], $poss[$i + 1] - $poss[$i]);
    for ($i = 0; $i < $regions_count; $i++) {
      $pattern = "|<img[^\"]*\"([^\"]*)\"[^\"]*\"m_propertySearchResultRepeater_[^_]*_imgThumb\"[^>]*>";
      $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnAddressHyperLink\"[^\"]*\"([^\"]*)\"[^>]*>([^<]*)</a[^>]*>";
      $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnM2HyperLink\"[^>]*>([^<]*)</a[^>]*>";
      $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnPriceHyperLink\"[^>]*>([^<]*)</a[^>]*>|isU";
      $n = preg_match_all($pattern, $regions[0][$i], $data);
      $region = explode(",", $regions[1][$i]);
      $region[0] = trim(str_replace("Region", " ", $region[0]));
      $zip_city = explode(" ", trim($region[1]));
      $city = $zip_city[1];
      for ($k = 2; $k < count($zip_city); $k++) $city .= " ".$zip_city[$k];

      for ($j = 0; $j < $n; $j++) {
        if (strpos($data[3][$j], ",") !== false) {
          $street = explode(",", $data[3][$j]);
          $houses[$hi]['street'] = $street[0];
        }
        else $houses[$hi]['street'] = $data[3][$j];
        $houses[$hi]['region'] = mb_convert_encoding($region[0], "ISO-8859-1", "UTF-8");
        $houses[$hi]['zip'] = $zip_city[0];
        $houses[$hi]['city'] = mb_convert_encoding($city, "ISO-8859-1", "UTF-8");
        $houses[$hi]['beds'] = 0;
        $houses[$hi]['baths'] = 0;
        $houses[$hi]['sqm'] = $data[4][$j];
        $houses[$hi]['price'] = str_replace(".", "", $data[5][$j]);
        $houses[$hi]['link'] = "http://danbolig.dk".$data[2][$j];
        $houses[$hi]['photo'] = $data[1][$j];
        $houses[$hi]['provider'] = 'danbolig2';

        $houses[$hi]['street'] = mb_convert_encoding($houses[$hi]['street'], "ISO-8859-1", "UTF-8");
        $hi++;
      }
    }
  }
  return $houses;
}


class HTTPRequestGET
{
   var $_fp;        // HTTP socket
   var $_url;        // full URL
   var $_host;        // HTTP host
   var $_protocol;    // protocol (HTTP/HTTPS)
   var $_uri;        // request URI
   var $_port;        // port

   // scan url
   function _scan_url()
   {
       $req = $this->_url;

       $pos = strpos($req, '://');
       $this->_protocol = strtolower(substr($req, 0, $pos));

       $req = substr($req, $pos+3);
       $pos = strpos($req, '/');
       if($pos === false)
           $pos = strlen($req);
       $host = substr($req, 0, $pos);

       if(strpos($host, ':') !== false)
       {
           list($this->_host, $this->_port) = explode(':', $host);
       }
       else
       {
           $this->_host = $host;
           $this->_port = ($this->_protocol == 'https') ? 443 : 80;
       }

       $this->_uri = substr($req, $pos);
       if($this->_uri == '')
           $this->_uri = '/';
   }

   // constructor
   function HTTPRequestGET($url)
   {
       $this->_url = $url;
       $this->_scan_url();
   }

   // download URL to string
   function DownloadToString()
   {
       $crlf = "\r\n";

       // generate request
       $req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
           .    'Host: ' . $this->_host . $crlf
           .    $crlf;

       // fetch
       $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
       fwrite($this->_fp, $req);
       while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp))
           $response .= fread($this->_fp, 1024);
       fclose($this->_fp);

       // split header and body
       $pos = strpos($response, $crlf . $crlf);
       if($pos === false)
           return($response);
       $header = substr($response, 0, $pos);
       $body = substr($response, $pos + 2 * strlen($crlf));

       // parse headers
       $headers = array();
       $lines = explode($crlf, $header);
       foreach($lines as $line)
           if(($pos = strpos($line, ':')) !== false)
               $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1));
       // redirection?
       if(isset($headers['location']))
       {
           $http = new HTTPRequestGET($headers['location']);
           return($http->DownloadToString($http));
       }
       else
       {
           return($body);
       }
   }
};

          $time = time();
          $page = 1;
          $houses = GetHousesFromDanBolig($page);
          while (!empty($houses) && $page < 11) {
            echo "<pre>";
            print_r($houses);
            echo "</pre>";
            $page++;
            $houses = GetHousesFromDanBolig($page);
          }
          echo (time() - $time);

?>

PM MAIL   Вверх
fraer
Дата 21.3.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.