Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг HTML-страниц
 
 автор: dirol   (19.12.2008 в 15:12)   письмо автору
 
 

помогите запарсить вот это http://profile.mygamercard.net/CenteringSoozyq
хочу данные выташить
верхний правый угол где аватар и CenteringSoozyq
Reputation: ******
GamerScore: 0
GamerZone: Recreation

или вот http://profile.mygamercard.net/Sany92

ниже тожеинформацию как взять
Sany92
"Россия"

Last Playing Xbox 360 Dashboard

Offline for 12 Hrs

  Ответить  
 
 автор: xx77   (19.12.2008 в 19:02)   письмо автору
 
   для: dirol   (19.12.2008 в 15:12)
 

С чем сложности ? :)
какое конкретно выражение написали которое не вытаскивает правый угол где аватар ?

  Ответить  
 
 автор: dirol   (19.12.2008 в 23:37)   письмо автору
 
   для: xx77   (19.12.2008 в 19:02)
 

вообще не че не получается. пробывал примеру тут на сайте. с регулярками не очень пока дружу.

может набросаете пример

  Ответить  
 
 автор: xx77   (20.12.2008 в 03:56)   письмо автору
 
   для: dirol   (19.12.2008 в 23:37)
 

Просто находите чем уникален исходный текст перед тем что нужно, копируете, экранируете спецсимволы такие как ?.\{}()[] и дописываете (.+?) и после этого копируете так-же ещё текст после того что нужно , который не встречается в нужном , вставляете в preg_match_all() , выводите резулльтат и смотрите исходный текст
Потом читаете про синтаксис regexp'ов и оптимизируете , получая лучшее выражение

Пример :)
...______
</table>
<br>
<a><img.....>техт</a>

вам нужно слово техт и картинка , но в тексте полно слов , и тегов <img>и <а>
но <br>после которых <а> практически нет ,значит нужно цеплять шаблон конкретно за самое это место :)
пишите
$regexp = '##';
## - это ограничители выражения , после ограничителей иногда надо ставить s
, если хотите чтобы точка которая соответвтвует любому символу соответствовала-бы переносам строк

и дальше вставляете шаблон $regexp = '#<br>
<a>(.+?)</a>#';
или
$regexp = '#<br>\s*<a>(.+?)</a>#';

\s* - это 0 или больше пробельных символов \s+ - 1 или больше \s? - 0 или 1
и так потихоньку смотрите чего получается, посматриваете в справочник , эксперементируете ;)

// забыл написать , сначала удобнее сохранить у себя страничку , чтобы не мучить трафик , и над этой копией можно делать всё что захочется

  Ответить  
 
 автор: dirol   (20.12.2008 в 11:04)   письмо автору
 
   для: xx77   (20.12.2008 в 03:56)
 

xx77

спасибо большое что предоставляешь такую информацию. а вот са хоть для начала не большой код можно?

file_get_contents ругается на то что-то походу что нет файла в сылке а есть только адрес(

  Ответить  
 
 автор: xx77 176x220   (20.12.2008 в 12:38)
 
   для: dirol   (20.12.2008 в 11:04)
 

Какой конкретно текст ошибки ?
Где запускаете ?
если на своей машине , включено-ли подключение к интернету ?
если на хостинге , включена-ли дирректива allow_url_fopen ?

имеет-ли вызов функции правильный формат , как например
 <?
$txt
=file_get_contents('http://адрес');
# удобнее сохранить
file_put_contents('temp.txt'$txt); 
# чтобы на время дальнейшего тестирования
# можно было вместо http://адрес вставить temp.txt

  Ответить  
 
 автор: dirol   (20.12.2008 в 13:17)   письмо автору
 
   для: xx77 176x220   (20.12.2008 в 12:38)
 

>Какой конкретно текст ошибки ?
>Где запускаете ?
>если на своей машине , включено-ли подключение к интернету ?
>если на хостинге , включена-ли дирректива allow_url_fopen ?
>
>имеет-ли вызов функции правильный формат , как например
>
 <?
>$txt=file_get_contents('http://адрес');
>
# удобнее сохранить
>file_put_contents('temp.txt'$txt); 
>
# чтобы на время дальнейшего тестирования
># можно было вместо http://адрес вставить temp.txt
>


allow_url_fopen включена.
запускаю на своей машине. трафик не беспокоит все ок.

 <?
$txt
=file_get_contents('http://profile.mygamercard.net/CenteringSoozyq');
# удобнее сохранить
file_put_contents('temp.txt'$txt);

?>


Warning: file_get_contents(http://profile.mygamercard.net/CenteringSoozyq) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in Z:\home\test1.ru\www\index.php on line 2


а вот если так

 <?
$txt
=file_get_contents('http://softtime.ru/forum/addpost.php?id_forum=6&id_theme=61057');
# удобнее сохранить
file_put_contents('temp.txt'$txt);

?>


то все ок создается temp.txt с содержимым этой темы вот

  Ответить  
 
 автор: xx77   (20.12.2008 в 15:58)   письмо автору
 
   для: dirol   (20.12.2008 в 13:17)
 

Всётаки пришлось переходить по ссылке :) Похоже просто проверяется есть-ли USERAGENT
. наверное тогда curl, попроще чем сокеты
<pre><?
 $request 
='http://profile.mygamercard.net/CenteringSoozyq';
$ch curl_init();

 
curl_setopt_array$ch
    array(
    
CURLOPT_URL => $request,
    
CURLOPT_TIMEOUT => 20,
    
CURLOPT_REFERER => "http://www.google.com/",
    
CURLOPT_USERAGENT => "Opera/8.01 (Windows; U; ru)",
    
CURLOPT_RETURNTRANSFER => 1
    
));
$txt=curl_exec($ch);
curl_close($ch);

file_put_contents('temp.txt'$txt);
echo 
htmlspecialchars($txt);

  Ответить  
 
 автор: dirol   (20.12.2008 в 16:47)   письмо автору
 
   для: xx77   (20.12.2008 в 15:58)
 

теперь ругается
Fatal error: Call to undefined function curl_init() in Z:\home\test1.ru\www\index.php on line 3

нехватает curl_init чтоли? где ее включить не подскажешь? у меня денвер3 стоит

  Ответить  
 
 автор: xx77   (20.12.2008 в 20:42)   письмо автору
 
   для: dirol   (20.12.2008 в 16:47)
 

раскомментировать строку extension=php_curl.dll
в /usr/local/php5/php.ini
, но это если в папке ext/ лежит такая dll

или придётся качать пакет расширений к денверу с разными библиотеками
, уже не помню было-ли php_curl.dll в базовом пакете denwer3

  Ответить  
 
 автор: dirol   (21.12.2008 в 02:41)   письмо автору
 
   для: xx77   (20.12.2008 в 20:42)
 

<pre><?
 $request 
='http://profile.mygamercard.net/sergey1978';
$ch curl_init();

 
curl_setopt_array$ch,
    array(
    
CURLOPT_URL => $request,
    
CURLOPT_TIMEOUT => 20,
    
CURLOPT_REFERER => "http://www.google.com/",
    
CURLOPT_USERAGENT => "Opera/8.01 (Windows; U; ru)",
    
CURLOPT_RETURNTRANSFER => 1
    
));
$txt=curl_exec($ch);
curl_close($ch);

file_put_contents('temp.txt'$txt);


preg_match_all('#<div[^>]+>(?!&nbsp;| |<a.*</a>)(.+?)</div>#is'$txt$out);
unset(
$out[0]);
echo 
$out[1][14];

print_r($out);
?>


зделал так много лишнего выводится(((

  Ответить  
 
 автор: dirol   (21.12.2008 в 02:55)   письмо автору
 
   для: dirol   (21.12.2008 в 02:41)
 

вот этот уголок правый который пока хочется выташить и разобрать


<div class="padding">
            <div class="userbox">
            <div class="content">
                <div class="section1">
                    <a href="http://profile.mygamercard.net/sergey1978"><img src="http://avatar.xboxlive.com/avatar/sergey1978/avatarpic-l.png" class="leftblock" alt="GamerPicture" /></a>
                </div>
                <div class="section2">
                    <h2><a href="http://profile.mygamercard.net/sergey1978">sergey1978</a></h2>
                    Reputation:<br />
                    GamerScore:<br />
                    GamerZone:
                </div>
                <div class="section3">
                    <div class="logoutButton">
                        <a href="https://secure.mygamercard.net/user/prep.php?app_id=1&amp;act=logout&amp;redirectURL=http%3A%2F%2Fprofile.mygamercard.net%2Fsergey1978"><img src="http://static.mgcstatic.net/images/site/topbox/logout.gif" alt="Log Out" /></a><br />
                    </div>
                    <div class="stars">
                        <img src="http://static.mgcstatic.net/images/site/topbox/star.gif" alt="Star" />
                        <img src="http://static.mgcstatic.net/images/site/topbox/star.gif" alt="Star" />
                        <img src="http://static.mgcstatic.net/images/site/topbox/star.gif" alt="Star" />
                        <img src="http://static.mgcstatic.net/images/site/topbox/star.gif" alt="Star" />
                        <img src="http://static.mgcstatic.net/images/site/topbox/star.gif" alt="Star" /><br />
                    </div>
                    <div class="text">
                        435<br />
                        Recreation                    </div>
                </div>
            </div>
        </div>
        </div>

  Ответить  
 
 автор: xx77 дефицит времени   (21.12.2008 в 17:38)
 
   для: dirol   (21.12.2008 в 02:55)
 

если честно , я не нашёл даже такого фрагмента в исходном коде.
да и некогда изучать этот чей-то враждебный сайт :)

Изучите регулярные выражения, и сможете вытаскивать всё что "пока хочется"
но грех грабить для того чтобы разместить у себя на сайте и написать " это моё " :)
никогда так не делал

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования