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

Статус
В этой теме нельзя размещать новые ответы.

zxxx

Постоялец
Регистрация
9 Окт 2009
Сообщения
148
Реакции
4
помогите извлечь из страницы, вот сайт там есть строка Your City : Город
Нужно извлечь со страницы Город
 
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
Спасибо, все работает, а если на той же странице вместо слова Город будет Регион - Город
Как в preg_match прописать, чтобы взять не Регион - Город вместе, а только Регион, т. е. до тирэ
 
достаточно убрать символ конца строки ($), и поставить после двоеточия - \s(\w+)\s (код ограниченный пробелами)

PHP:
preg_match("/^Your City Region\s+:\s(\w+)\s/im",$page,$res);
echo $res[1];
 
Благодарю, еще не приходилось работать в 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 = 'извлечь строку (1)';
$2 = 'извлечь строку (2)';
$3 = 'извлечь строку (3)';
$4 = 'извлечь строку (4)';
$5 = 'извлечь строку (5)';
 
можно применить универсальный способ, допустим каждое требуемое вхождение обозначаем как '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];
 
хорошая идея с регулярками, а если в
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'; // составление регулярки
а вот дальше непонятно
 
снова вопрос по тому же сайту
тут извлекалось из Your City Region : Регион - Город, слово Регион
PHP:
preg_match("/^Your City Region\s+:\s(\w+)\s/im",$page,$res);
echo $res[1];

А теперь надо извлечь только слово Город, без тире и прочего
 
если без окончания 'city' то так:

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

 
  • Нравится
Реакции: zxxx
Непонятно зачем такой метод получения города использовать.
Есть же геоайпи сервисы с api, посылаешь запрос - получаешь ответ
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху