необходимо вытащить телефоны со странички
Пользователи, просматривающие топик: 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'=>'<div><b>{name}</b></div>',
'1'=>'class="adress">{adress}<br></div>',
'2'=>'<div class="adress"><b>Тел: </b>{phone}</div>',
'3'=>'E-Mail: </b><a href="mailto:{email}">',
'4'=>'WWW: </b><noindex><a rel='."'".'external nofollow'."'".' target="_blank" href="{WWW}">',
'5'=>'<div class="adress"><b>Виды деятельности: </b>{descr}</div>',
);
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)<br>\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->text=$this->socket($link);
foreach ($param as $key => $value)
{
$this->mask=$value;
if (!empty($this->text))
{
$arr[$key]=$this->parse();
}
}
$this->result=$arr;
}
public function parse() {
$mask=explode("\r\n",$this->mask);
$res=array();
for($i=0;$i<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=>$v){
$k++;
$res[$v]=$this->getoneval($this->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->result))
foreach ($pars->result as $k => $v)
{
if (!empty($v))
foreach ($v as $key => $v1)
{
if (!empty($v1))
foreach ($v1 as $key1 => $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."');<br>";
}
pagegrab("http://www.goldpages.donetsk.ua/details/","0f59a26cd832170b97a224e6a435c651/")
при чём вытягивает все данные кроме телефона и описания… я уже и маску проверил 10 раз уже всё верно.. но ночемуто телефон упорно нехочет вытягивать подскажите пожалуйста в чём подвох?
|
|
|
RE: необходимо вытащить телефоны со странички - 2009-02-06 12:20:35.060000
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
самое непонятное в том, что некоторые маски почемуто просто нехочет проходить… даже несмотря на то что они описаны коректно.. например если сделать print_r($scr); в функции pagegrab выведет структуру данных в которой небудет phone и это очень странно.. глюк какойто непонятный
|
|
|
RE: необходимо вытащить телефоны со странички - 2009-02-06 12:58:20.033333
|
|
|
Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
Целый класс завел О_о Учите регулярки:
<?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);
?>
|
|
|
RE: необходимо вытащить телефоны со странички - 2009-02-06 15:35:21.830000
|
|
|
magistr_bender
Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
|
Pashkela вообщето начальный вариант и был как у тебя, но дело в том, что на моём хостинге администрация упорно отказывается включить опцию для загрузки файлов с удалённых адресов.. .говорят мол сокеты юзайте…типо это защита у них такая… так что пришлось сокетами делать… хотя на локале у меня отлично пашет и твой вариант :) кстати разобрался в чём проблемма была.. просто страничка была в виндовс-1251 а мой скрипт в ютф8 из-за этого бок и возникал :)
|
|
|
|
|