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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсинг странички, замучался уже 
:(
    Опции темы
alligator
Дата 11.1.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Наваял ф-ю которая выдерает урлы......
Код

 function Get_WebLinksAlt($where,$host){
 $str = preg_replace('/class=\"[\w\d\s]+\"/i','',$where);
 $str = preg_replace('/style=\"[\w\d\s#;:-]+\"/i','',$str);
 $str = preg_replace('/[\r\n\s\t]+/',' ',$str);
//print $str;

preg_match_all('/<a\s+href=(?:\"|\')?http:\/\/(?:[w\.]|[\w\d.])*'.$host.'\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|\')?\s*>([\w\d\s<>\/]+)<\/a>/i',$str,$out);
if(isset($out[1]) && sizeof($out[1])!=0){
  return $out;
  }else{
    return false;
 }
 }
//выберает урлы с параметрами и без

Работает нормально если в коде только урлы(без явы и тд , это добавлю потом),НО есть одна проблемка не могу с ней справиться ..... если после <a href="http://somesite.com"> , присутствует например <img src=""................
то ф-я уже ничего не находит ,Как поправить...... ?

функция будет применяться для парсинга абсолютно разных сайтов с разным дизайном и соответственно код ссылки могут быть представлены по разному....


Это сообщение отредактировал(а) alligator - 11.1.2007, 20:37
PM MAIL   Вверх
Mal Hack
Дата 11.1.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



А что надо-то?
PM ICQ   Вверх
alligator
Дата 11.1.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема решена , переделал в такой вид:
Код

 function Get_WebLinksAlt($where,$host){
 $str = preg_replace('/class=\"[\w\d\s]+\"/i','',$where);
 $str = preg_replace('/style=\"[\w\d\s#;:-]+\"/i','',$str);
 $str = preg_replace('/alt=(?:\"|\')?([а-яА-Я\d\w\s,.\-]+)?(?:\"|\')?/i','',$str);
 $str = preg_replace('/(?:height=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:width=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:border=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/<img\s+src=(?:\"|\')?[\w\d\/.]+(?:\"|\')?\s*>/i','',$str);
 $str = preg_replace('/[\s\t]+/',' ',$str);
//print $str;

 //preg_match_all('/<a\s+href=(?:\"|\')?http:\/\/(?:[w\.]|[\w\d.])*'.$host.'\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|\')?\s*>([\w\d\s<>\/]+)<\/a>/i',$str,$out);
   preg_match_all('/<a\s+href=(?:\"|\')?http:\/\/(?:[w\.]|[\w\d.])*'.$host.'\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|\')?\s*>([а-яa-z0-9\s]+)<\/a>/i',$str,$out);
   if(isset($out[1]) && sizeof($out[1])!=0){
  return $out[1];
   }else{
    return false;
 }
 }

нужно выдрать все анкоры(текст ссылок) у ссылок
А проблемка была что регуляр не читал русские символы пришлось добавить а-я тогда стало нормально
Кстати есть вопрос : когда используеться модификатор шаблона "i" я могу писать только а-я или еще надо А-Я чтобы поиск был без учета регистра..... ????
PM MAIL   Вверх
alligator
Дата 11.1.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще вопросик повявился у меня куча регуляров для удаления тего возможно ли данную операцию сделать одним регуляром ?
PM MAIL   Вверх
Mal Hack
Дата 11.1.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



alligator, нужно.
Цитата(alligator @  11.1.2007,  21:10 Найти цитируемый пост)
Кстати есть вопрос : когда используеться модификатор шаблона "i" я могу писать только а-я или еще надо А-Я чтобы поиск был без учета регистра..... ???? 

a-z учитывает A-Z при модификаторе i.

Цитата(alligator @  11.1.2007,  21:10 Найти цитируемый пост)
нужно выдрать все анкоры(текст ссылок) у ссылок

#<a.+?>(.+?)</a>#i
Разве не катит?
Цитата(alligator @  11.1.2007,  21:10 Найти цитируемый пост)
А проблемка была что регуляр не читал русские символы пришлось добавить а-я тогда стало нормально

setlocale()

PM ICQ   Вверх
alligator
Дата 13.1.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Mal Hack @  11.1.2007,  23:23 Найти цитируемый пост)
#<a.+?>(.+?)</a>#i
Разве не катит?



Mal Hack, катит , но ентот регуляр для всех урлов....

Свой регуляр довел , до вот такого вида:
Код

   preg_match_all('/<a\s+href=(?:\"|\')?http:\/\/(?:[w\.]|[\w\d.])*'.$host.'\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|\')?\s*>([а-я\w\d\s<>\/.,:;!?]+)<\/a>/i',$str,$out);

Работает более или менее стабильно, хотя бывает глюк когда не обнаруживает ссылку , но мне кажеться что енто связано с использованием
curl_multi_init()
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(alligator @  13.1.2007,  19:26 Найти цитируемый пост)
Mal Hack, катит , но ентот регуляр для всех урлов....

Что значит не для всех? А для каких надо?

Цитата(alligator @  13.1.2007,  19:26 Найти цитируемый пост)
Работает более или менее стабильно, хотя бывает глюк когда не обнаруживает ссылку , но мне кажеться что енто связано с использованием

Результат работы регулярки не зависит от того, как получается исходная информация.
PM ICQ   Вверх
alligator
Дата 13.1.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Mal Hack @  13.1.2007,  20:29 Найти цитируемый пост)
Что значит не для всех? А для каких надо?

Я на написал что для всех урлов.....
А надо для определенного урла , посмотри в моей вводиться переменная ......

PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Код
preg_match_all( "#<a.+?href=(\"|')" . preg_quote($host) . "\\1.*?>(.+?)</a>#i" );

PM ICQ   Вверх
alligator
Дата 13.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ничего не находит....
Код

<?php
$host="www.mebelinfo.ru";

$connomains = array("http://www.vgoroda.ru/","http://www.hist.ru/","http://www.72rus.ru/","http://www.siduk.ru/","http://www.rus-realty.ru/","http://www.mobilesoft.info/","http://www.mebelbest.info/","http://www.bigmotors.ru/");
$mh = curl_multi_init();
foreach ($connomains as $i => $url) {
       $conn[$i]=curl_init($url);
       curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
       curl_multi_add_handle ($mh,$conn[$i]);
}

do { $n=curl_multi_exec($mh,$active); } while ($active);

foreach ($connomains as $i => $url) {
       $res[$i]=curl_multi_getcontent($conn[$i]);
       curl_close($conn[$i]);
       //print "Сайт - ".$url."<br />";
       $backs[] = Get_WebLinksAlt($res[$i],$host);
     }
//     print_r($backs);

 function Get_WebLinksAlt($where,$host){
 /*$str = preg_replace('/class=(?:\"|\')?[\w\d\s]+(?:\"|\')?/i','',$where);
 $str = preg_replace('/style=(?:\"|\')?[\w\d\s#;:,-]+(?:\"|\')?/i','',$str);
 $str = preg_replace('/target=(?:\"|\')?[\w\d\s_]+(?:\"|\')?/i','',$str);
 $str = preg_replace('/alt=(?:\"|\')?([а-яА-Я\d\w\s,.\-]+)?(?:\"|\')?/i','',$str);
 $str = preg_replace('/(?:height=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:width=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:border=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/<font.+?>/i','',$str);
 $str = preg_replace('/target=(?:\"|\')?[\w\d\s_]+(?:\"|\')?/i','',$str);
 $str = preg_replace('/(?:size=(?:\"|\')?\d+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:face=(?:\"|\')?[\w\d\s;:]+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/(?:color=(?:\"|\')?[\w\d#:;\-]+(?:\"|\')?)?/i','',$str);
 $str = preg_replace('/<img.+?>/i','',$str);
 $str = preg_replace('/[\r\n\s\t]+/',' ',$str);*/
 //print $str;
//preg_match_all('/<a\s+href=(?:\"|\')?http:\/\/(?:[w\.]|[\w\d.])*'.$host.'\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|\')?\s*>([а-я\w\d\s<>\/.,:;!?]+)<\/a>/i',$str,$out);
 preg_match_all( "#<a.+?href=(\"|')" . preg_quote($host) . "\\1.*?>(.+?)</a>#i",$where,$out );
print_r($out);
   if(isset($out[1]) && sizeof($out[1])!=0){
  return $out[1];
   }else{
    return false;
 }
 }


Ни на одном сайте ничего не нашел....
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Код
preg_match_all( "#<a.+?href=(\"|')?" . preg_quote($host) . "(\"|')?.*>(.+?)</a>#ie",$where,$out );
$out=$out[3];
print_r($out);

PM ICQ   Вверх
alligator
Дата 13.1.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

preg_match_all( "#<a.+?href=(?:\"|')?http:\/\/" . preg_quote($host) . "\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|')?.*>(.+?)</a>#ie",$where,$out );

Добавил проверку на параметры урла..... и чуток вывод почище сделал
Теперь обнаруживает , но нестабильно , например: 
с первого сайта выдрал все урлы и сохранил как результат не тот анкор, а именно от последней выдраной ссылки....

Добавлено @ 20:47 
http://it-2.ru/yand/pos/direct/multi.php
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



alligator, все, что ты сделал - лишнее.
Оптимизация может быть только в виде:
Код

preg_match_all( "#<a.+?href=(\"|')?" . preg_quote($host) . "\\1.*>(.+?)</a>#ie",$where,$out );

Но у меня это не получилось, почему не помню.
PM ICQ   Вверх
alligator
Дата 13.1.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Mal Hack @  13.1.2007,  22:00 Найти цитируемый пост)
alligator, все, что ты сделал - лишнее.
Оптимизация может быть только в виде:
Выделить всёкод PHP
1:
    
preg_match_all( "#<a.+?href=(\"|')?" . preg_quote($host) . "\\1.*>(.+?)</a>#ie",$where,$out );

Но у меня это не получилось, почему не помню. 


Такой вариант не находит ничего, я понимаю что он более правильно сделан с точки зрения универсальности, но вариант показанный мной выше
Код

preg_match_all( "#<a.+?href=(?:\"|')?http:\/\/" . preg_quote($host) . "\/?(?:[\/\d\w.\-:;%_&=?]+)?(?:\"|')?.*?>(.+?)</a>#ie",$where,$out );

Хоть что то находит.....

Добавлено @ 21:18 
Исправлено! Посмотри последний вариант регуряла что я выложил....

Это сообщение отредактировал(а) alligator - 13.1.2007, 21:20
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Код

<pre>
<?php

$where = <<<EOF

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"

<html>

<head>
<title>Главная</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="style.css" rel="stylesheet" type="text/css">
</head>


<body>
<table border="0" width="100%" cellspacing="0" cellpading="0" class="top">
<tr>
<td colspan="2" height="15px"></td>
</tr>
<tr><td width="25% height="35px" class="topleft">VGORODA.RU &nbsp</td><td width="75%" height="35px" style="font:bold 18px Courier New,monospace;color:#FFFCE5">&nbsp ЭКСПРЕСС ДОСТАВКА ГРУЗОВ</td>

</tr>
<tr>
<td colspan="2" height="15px"></td>
</tr>
</table>
<table border="0" width="100%" cellspacing="0" cellpading="0"> 
<tr>
<td height="5px"></td>
</tr>
<tr>
<td height="30px" class="menu">
<a href="/">Главная</a><span>||</span>
<a href="onas.html">О нас</a><span>||</span>

<a href="tarifi.html">Тарифы</a><span>||</span>
<a href="zayavka.html">Заявка</a><span>||</span>
<a href="linkchange.php">Ссылки</a>
</td>
</tr>
<tr>
<td height="5px"></td>
</tr>
</table>
<table border="0" width="100%" cellspacing="0" cellpadding="0">

<tr><td width="78%" height="150px" class="topfon">Доставка грузов в любую точку Северо-Запaдного региона в кротчайшие сроки</td>


<td rowspan="2" width="22%" class="rekl">
<h2 class="zagrekl">Партнеры</h2>
<ol>
    <li>






<a href="http://www.perevozimgruzi.ru" target=_blank>квартирный переезд, услуги грузчиков</a><li><a href="http://www.online-renault.ru " target=_blank>автомобиль renault, автомобиль рено</a><li><a href="http://www.tubes2000.ru" target=_blank>труба стальная, отводы стальные</a><li><a href="http://www.kontakt-l.ru/" target=_blank>документация электромонтажных работ</a><li><a href="http://www.info-stom.ru/" target=_blank>стоматология, лечение зубов</a><li><a href="http://www.center-torg.ru/" target=_blank>Современное торговое оборудование</a><li><a href="http://www.mebelinfo.ru/" target=_blank>стулья, стол, диван</a><li><a href="http://www.divaninfo.ru/" target=_blank>мебель, кресла, мягкая мебель, диваны</a><li><a href="http://www.ecoavtotrans.ru" target=_blank>доставка грузов, автоперевозки, грузовые перевозки</a><li><a href="http://www.avtotransglobal.ru" target=_blank>доставка грузов</a><li><a href="http://www.kupimebel.ru" target=_blank>мебель - кухни и диваны</a><li><a href="http://www.matras4you.ru" target=_blank>ортопедические матрасы</a><li><a href="http://www.kosmohost.com" target=_blank>хостинг, регистрация домена</a><li><a href="http://www.reklama-media.ru" target=_blank>вывески - изготовление и монтаж</a><li><a href="http://www.hotstar.ru" target=_blank>протерм, насосы водяные</a><li><a href="http://www.1md.ru" target=_blank>мебель, кровати</a>    
    </ol>    
    
    
    </td></tr>

    <tr><td height="300px" class="content" style="border-right:none">
<p class="paragraf" style="padding-top:20px">Наша фирма  осуществляет грузоперевозки автомобилями семейства "Газ"(<a href="3302.html">Газ 33-02 бортовой и тентованный</a>, <a href="2705.html">Газ 27-05 Фургон</a>, <a href="3307.html">Газ 33-07 бортовой</a> и <a href="3309.html">Газ 33-09 фургон</a>) в города и населенные пункты Северо-Западного региона.
</p>
<p class="paragraf">Мы зарекомендовали себя перед клиентами и можем гарантировать:<br><br>
-своевременную подачу автомобиля<br> 

-качественную перевозку Вашего груза<br> 
-оптимальные цены<br></p>
<p class="paragraf">На сегодняшний день наш парк состоит из автомобилей грузоподъемность которых  1500-4500 кг, с различными вариантами кузова.Парк автомобилей постоянно расширяется,в будующем планируется закупка более грузоподъемных машин и машин для перевозки специфичных грузов.</p>
    </td></tr>
    <tr><td colspan="2" height="5px"></td></tr>
<tr><td colspan="2" height="30px" class="menu"
style="font:12px Courier New,monospace;border:none">
<a href="/">Главная</a><span>||</span>
<a href="onas.html">О нас</a><span>||</span>

<a href="tarifi.html">Тарифы</a><span>||</span>
<a href="zayavka.html">Заявка</a><span>||</span>
<a href="linkchange.php">Ссылки</a>
    </td></tr>
    <tr><td colspan="2" height="5px"></td></tr>
<tr><td colspan="2" height="30px" class="adres">Санкт-Петербург, ул Возрождения 20; e-mail: [email protected]</td></tr>
</table>
</body>
</html>


EOF;

$host = "www.perevozimgruzi.ru";
preg_match_all( "#<a.+?href=(\"|')?http:\/\/" . preg_quote($host) . "(\"|')?.*>(.+?)</a>#ie",$where,$out );
$out=$out[3];
print_r($out);

?>


На выходе:
Цитата

Array
(
    [0] => мебель, кровати
)



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


 




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


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

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