извлечь из страницы

Тема в разделе "PHP", создана пользователем zxxx, 9 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    помогите извлечь из страницы, вот сайт http://www.komar.org/cgi-bin/ip_to_country.pl там есть строка Your City : Город
    Нужно извлечь со страницы Город
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    $opt stream_context_create(array('http'=>array('method'=>"GET",'header'=>
    "User-Agent: Mozilla/4.0 (compatible; MSIE 9.0)\r\n")));
    $page file_get_contents('http://www.komar.org/cgi-bin/ip_to_country.pl',0,$opt);
    preg_match("/^Your City\s+:\s+(.+)$/im",$page,$res);
    echo 
    $res[1];
     
    zxxx нравится это.
  3. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    Спасибо, все работает, а если на той же странице вместо слова Город будет Регион - Город
    Как в preg_match прописать, чтобы взять не Регион - Город вместе, а только Регион, т. е. до тирэ
     
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    достаточно убрать символ конца строки ($), и поставить после двоеточия - \s(\w+)\s (код ограниченный пробелами)

    PHP:
    preg_match("/^Your City Region\s+:\s(\w+)\s/im",$page,$res);
    echo 
    $res[1];
     
  5. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    Благодарю, еще не приходилось работать в php с текстовыми данными на странице, а это очень полезная вещь. А еще на последок можешь помочь, вот допустим в html коде содержится
    PHP:
    div><span class="top">извлечь строку (1)</span></div>
       <
    div class="top1">
             <
    div>извлечь строку (2)<br>извлечь строку (3), извлечь строку (4)</div>
             <
    div class="top2">извлечь строку (5)</div></div>
    нужно извлечь каждую строку для того чтобы получилось:
    PHP:
    $'извлечь строку (1)';
    $
    'извлечь строку (2)';
    $
    'извлечь строку (3)';
    $
    'извлечь строку (4)';
    $
    'извлечь строку (5)';
     
  6. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    можно применить универсальный способ, допустим каждое требуемое вхождение обозначаем как '1_x_1'
    далее экранируем спецсимволы, добавляем модификаторы, и заменяем '1_x_1' на (.+)
    в итоге получается регулярка, результаты работы которой можно посмотреть через - print_r($res);

    PHP:
    $in 'div><span class="top">1_x_1</span></div>
    <div class="top1">
    <div>1_x_1<br>1_x_1, 1_x_1</div>
    <div class="top2">1_x_1</div></div>'
    ;  // шаблон регулярки
    $in quotemeta($in); // экранирование спецсимволов
    $regex '|'.str_replace('1_x_1','(.+)',$in).'|iUs'// составление регулярки

    $text 'div><span class="top">текст 1</span></div>
    <div class="top1">
    <div>сайт 2<br>новости, email</div>
    <div class="top2">sample text</div></div>'
    ;

    preg_match($regex,$text,$res); // используем регулярку на тексте

    //print_r($res);
    echo $res[1];
    echo 
    $res[5];
    или вариант 2 для XHE с уже готовой регуляркой

    PHP:
    $browser->navigate('http://site.com/');
    $page $webpage->get_source(); // получаем html код

    preg_match('|<div><span class="top">(.+)</.+<div>(.+)<br>(.+),\s(.+)</.+"top2">(.+)</div></div>|iUs',$page,$res);

    $a1 $res[1]; // извлечь строку (1)
    $a2 $res[2];
    $a3 $res[3];
    $a4 $res[4]; // извлечь строку (4)
    $a5 $res[5];
     
  7. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    хорошая идея с регулярками, а если в
    PHP:
    $text 'div><span class="top">текст 1</span></div>
    <div class="top1">
    <div>сайт 2<br>новости, email</div>
    <div class="top2">sample text</div></div>'
    ;
    все значения текст 1, новости, email и т.д. неизвестны (каждый раз новые), то как в скрипте писать?
    т.е.
    PHP:
    $text 'div><span class="top">текст 1</span></div>
    <div class="top1">
    <div>сайт 2<br>новости, email</div>
    <div class="top2">sample text</div></div>'
    находится на странице
    я делаю так $browser->navigate('адрес сайта');
    далее
    PHP:
    $in 'div><span class="top">1_x_1</span></div>
    <div class="top1">
    <div>1_x_1<br>1_x_1, 1_x_1</div>
    <div class="top2">1_x_1</div></div>'
    ;  // шаблон регулярки
    $in quotemeta($in); // экранирование спецсимволов
    $regex '|'.str_replace('1_x_1','(.+)',$in).'|iUs'// составление регулярки
    а вот дальше непонятно
     
  8. zxxx

    zxxx Постоялец

    Регистр.:
    9 окт 2009
    Сообщения:
    148
    Симпатии:
    4
    снова вопрос по тому же сайту
    тут извлекалось из Your City Region : Регион - Город, слово Регион
    PHP:
    preg_match("/^Your City Region\s+:\s(\w+)\s/im",$page,$res);
    echo 
    $res[1]; 
    А теперь надо извлечь только слово Город, без тире и прочего
     
  9. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    если без окончания 'city' то так:

    PHP:
    preg_match("/^Your City Region\s+:\s\w+\s\-\s(.+?)(city)?$/im",$page,$res);
    echo 
    $res[1]
    но все же логичнее для начала прочесть мануал: 1,2
     
    zxxx нравится это.
  10. TheGp

    TheGp Писатель

    Регистр.:
    21 янв 2010
    Сообщения:
    7
    Симпатии:
    1
    Непонятно зачем такой метод получения города использовать.
    Есть же геоайпи сервисы с api, посылаешь запрос - получаешь ответ
     
Статус темы:
Закрыта.