Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

необходимо вытащить телефоны со странички

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> необходимо вытащить телефоны со странички
Имя
Сообщение << Старые топики   Новые топики >>
необходимо вытащить телефоны со странички - 2009-02-06 11:24:56.726666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
есть страничка
http://www.goldpages.donetsk.ua/details/0f59a26cd832170b97a224e6a435c651/
я её парсю и вытягиваю нужные мне данные по фильтру
с помощью следующего кода
$goldpages_ditail_hash = array( '0'=&gt;'&lt;div&gt;&lt;b&gt;{name}&lt;/b&gt;&lt;/div&gt;', '1'=&gt;'class="adress"&gt;{adress}&lt;br&gt;&lt;/div&gt;', '2'=&gt;'&lt;div class="adress"&gt;&lt;b&gt;Тел: &lt;/b&gt;{phone}&lt;/div&gt;', '3'=&gt;'E-Mail: &lt;/b&gt;&lt;a href="mailto:{email}"&gt;', '4'=&gt;'WWW: &lt;/b&gt;&lt;noindex&gt;&lt;a rel='."'".'external nofollow'."'".' target="_blank" href="{WWW}"&gt;', '5'=&gt;'&lt;div class="adress"&gt;&lt;b&gt;Виды деятельности: &lt;/b&gt;{descr}&lt;/div&gt;', ); class socket { public function socket($url) { $url = substr($url,7); $timeout = 30; // Max time for stablish the conection $server = substr($url,0,strpos($url,'/')); // IP address $url = substr($url,strpos($url,'/')); $host = $server; // Domain name $target = substr($url,0,strpos($url,'?')); // Specific program $referer = A_URL; // Referer $port = 80; $getValues = substr($url,strpos($url,'?')); $request = "GET $target$getValues HTTP/1.1\r\n"; $request .= "Host: $host\r\n"; $request .= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) '; $request .= "Gecko/20021204\r\n"; $request .= 'Accept: '; $request .= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,'; $request .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $request .= "Connection: close\r\n\r\n"; $socket = fsockopen( $server, $port, $errno, $errstr, $timeout ); if (!$socket) { echo "$errstr ($errno)&lt;br&gt;\n"; exit; } else { fwrite( $socket, $request ); $ret = ''; while ( !feof( $socket ) ) { $ret .= fgets( $socket, 4096 ); } fclose( $socket ); return $ret; } } } class page_parser extends socket { public $link=''; public $text=''; public $arr=array(); public function page_parser($param,$link) { $this-&gt;text=$this-&gt;socket($link); foreach ($param as $key =&gt; $value) { $this-&gt;mask=$value; if (!empty($this-&gt;text)) { $arr[$key]=$this-&gt;parse(); } } $this-&gt;result=$arr; } public function parse() { $mask=explode("\r\n",$this-&gt;mask); $res=array(); for($i=0;$i&lt;count($mask);$i++) { preg_match_all("#{(.+?)}#",$mask[$i],$key); $mask[$i]=quotemeta($mask[$i]); $mask[$i]=preg_replace("#{(.+?)}#","(.*?)",$mask[$i]); foreach($key[1] as $k=&gt;$v){ $k++; $res[$v]=$this-&gt;getoneval($this-&gt;text,$mask[$i],$k); } } return $res; } public function getoneval($v,$ch,$num) { if(preg_match_all("#".$ch."#si",$v,$te)) return $te[$num]; return ''; } } function pagegrab ($site,$hash) { global $goldpages_ditail_hash; $pars=new page_parser($goldpages_ditail_hash,$site.$hash."/"); if(!empty($pars-&gt;result)) foreach ($pars-&gt;result as $k =&gt; $v) { if (!empty($v)) foreach ($v as $key =&gt; $v1) { if (!empty($v1)) foreach ($v1 as $key1 =&gt; $value) $scr[$key]=$value; } } $name = preg_replace("!'!", '"', $scr['name']); $email = preg_replace("!'!", '"', $scr['email']); $www = preg_replace("!'!", '"', $scr['WWW']); $descr = preg_replace("!'!", '"', $scr['descr']); $adress = preg_replace("!'!", '"', $scr['adress']); $phone = preg_replace("!'!", '"', $scr['phone']); // if (isset($scr['email'])) print"(id,'".$name."','".$email."','".$www."','".$descr."','".$adress."','".$phone."');&lt;br&gt;"; } pagegrab("http://www.goldpages.donetsk.ua/details/","0f59a26cd832170b97a224e6a435c651/")
при чём вытягивает все данные кроме телефона и описания…
я уже и маску проверил 10 раз уже всё верно.. но ночемуто телефон упорно нехочет вытягивать
подскажите пожалуйста в чём подвох?
Post #: 1
RE: необходимо вытащить телефоны со странички - 2009-02-06 12:20:35.060000   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
самое непонятное в том, что некоторые маски почемуто просто нехочет проходить… даже несмотря на то что они описаны коректно..
например если сделать print_r($scr); в функции pagegrab выведет структуру данных в которой небудет phone и это очень странно.. глюк какойто непонятный
Post #: 2
RE: необходимо вытащить телефоны со странички - 2009-02-06 12:58:20.033333   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
Целый класс завел О_о

Учите регулярки:

&lt;?php @set_time_limit(0); @ini_set("display_errors","1"); $filename = file_get_contents('http://www.goldpages.donetsk.ua/details/0f59a26cd832170b97a224e6a435c651/'); $patern = '/\((.[0-9]*\) [0-9]*-[0-9]*)/s'; preg_match_all($patern, $filename, $result); print_r ($result); ?&gt;
Post #: 3
RE: необходимо вытащить телефоны со странички - 2009-02-06 15:35:21.830000   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
Pashkela
вообщето начальный вариант и был как у тебя, но дело в том, что на моём хостинге администрация упорно отказывается включить опцию для загрузки файлов с удалённых адресов.. .говорят мол сокеты юзайте…типо это защита у них такая… так что пришлось сокетами делать… хотя на локале у меня отлично пашет и твой вариант :)

кстати разобрался в чём проблемма была.. просто страничка была в виндовс-1251 а мой скрипт в ютф8 из-за этого бок и возникал :)
Post #: 4
Страниц:  [1]
Все форумы >> [Веб-программинг] >> необходимо вытащить телефоны со странички







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.