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

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

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

 

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

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

тема: Грабер новостей
 
 автор: ll   (21.08.2005 в 12:24)   письмо автору
 
 

Может, кто разьяснит?
Я хочу прочитать текст с удаленной страницы. Смотрел тему-грабер новостей.
Самый подходящий скрипт для этого
<?php
$bufer = file_get_contents("http://www.lenta.ru");
preg_match_all("|<p>([^<]*)</p>|i",$bufer,$out,PREG_PATTERN_ORDER);
foreach($out[1] as $ss)
{
echo $ss."<br><br>";
}
?>
Читал доки по php.
Непонятно- какое регулярное выражение должно стоять в кавычках в функции
preg_match_all ? В данном примере это |<p>([^<]*)</p>|i
то есть видимо все, что стоит между тегами <p> и </p>
А как сделать чтобы читалась статья к примеру с этой вот страницы-
http://pravoslavie.ru/news/050819014508?

   
 
 автор: cheops   (21.08.2005 в 13:08)   письмо автору
 
   для: ll   (21.08.2005 в 12:24)
 

Не всегда стоит зацикливаться на регулярных выражениях - они в основном применяются когда со страницы необходимо вытащить много повторяющихся элементов - у вас одно название и одна статья. Если название ещё целесообразно вытащить при помощи регулярных выражений, так как окружение может повторятся, то окружение статьи уникально и легко достаётся при помощи строковых функций
<?php 
  $bufer 
file_get_contents("http://pravoslavie.ru/news/050819014508"); 
  
// Название
  
preg_match_all("|<td[^>]*><b>([^<]+)<|i",$bufer,$out,PREG_PATTERN_ORDER);
  foreach(
$out[1] as $ss
  { 
    echo 
$ss."<br><br>"
  }
  
// Текст
  
$pos_str strpos($bufer,"<?xml:namespace prefix = st1 />");
  
$pos_end strpos($bufer,"<!--autor-->");
  echo 
substr($bufer,$pos_str$pos_end $pos_str);
?>

   
 
 автор: ll   (21.08.2005 в 21:22)   письмо автору
 
   для: cheops   (21.08.2005 в 13:08)
 

Да- спасибо огромное!
Опробовал -код работает, но вот только он в тексте и картинки вставляет-
и они неверно отображаются...
Как без картинок сделать?

   
 
 автор: cheops   (22.08.2005 в 01:16)   письмо автору
 
   для: ll   (21.08.2005 в 21:22)
 

Вот здесь уже целесообразно применить регулярные выражения
<?php 
  $bufer 
file_get_contents("opr000JR.htm"); 
  
// Название 
  
preg_match_all("|<td[^>]*><b>([^<]+)<|i",$bufer,$out,PREG_PATTERN_ORDER); 
  foreach(
$out[1] as $ss
  { 
    echo 
$ss."<br><br>"
  } 
  
// Текст 
  
$pos_str strpos($bufer,"<?xml:namespace prefix = st1 />"); 
  
$pos_end strpos($bufer,"<!--autor-->"); 
  
$text substr($bufer,$pos_str$pos_end $pos_str); 
  
$text preg_replace("|<IMG[^>]+>|i","",$text);
  echo 
$text;
?>

   
 
 автор: ll   (22.08.2005 в 18:42)   письмо автору
 
   для: cheops   (22.08.2005 в 01:16)
 

Да-классно!
Спасибо!
Мне бы так научиться писать регулярные выражения....

   
 
 автор: ll   (27.08.2005 в 11:19)   письмо автору
 
   для: ll   (22.08.2005 в 18:42)
 

Вот помогите еще разок...
Хочу взять новость со страницы
http://blagoslovenie.msk.ru/publisher/index.php?option=com_content&task=view&id=887&Itemid=47
кактут написать ее вывод?
Писал
$bufer = file_get_contents("$link");
// Текст

$pos_str = strpos($bufer,"<tr><td valign=\"top\" colspan=\"2\">");
$pos_end = strpos($bufer,"</td></tr>");
$text = substr($bufer,$pos_str, $pos_end - $pos_str);

Но так не хочет...хоть и просто текст с уникальной страницы-но не берет...
Как написать в регулярных выражениях?
Еще хотелось бы брать анонсы новостей с картинками
со страницы
http://blagoslovenie.msk.ru/publisher/
Я делаю так- читаю rss канал скриптом- в нем раскладываю по title, description,
pubdate и т.д.- и потом вывожу или кладу в свою базу и уже из нее-вывожу...
но как сделать-чтобы прочитать description с картинками?
Заранее спасибо!

   
 
 автор: cheops   (27.08.2005 в 13:40)   письмо автору
 
   для: ll   (27.08.2005 в 11:19)
 

Не смотрите на мой код как на триптих :))) для разборки чужого HTML-кода, тем более сгенерированного PHP - это вредно. Дело в том, что между тэгом <tr> и <td valign=\"top\" colspan=\"2\"> находится первод строки и море пробелов, как в прочем и между </td> и </tr>. При подборе якорей, к которым вы будете привязываться, на этапе отладки обязательно следует выводить значения $pos_str и $pos_end - вслепую ничего не сделаете. $pos_str должно быть всегда больше $pos_end. Если окружение не уникально не нужно искать по большому куску текста, лучше последовательно приближаться к цели несколькими функциями strpos(), зацепляясь за строки, которые точно никогода не будут разделять переводом строки. Регулярные выражения можно применить, но здесь они будут громоздкими и в них очень легко ошибиться, гораздо проще выдрать текст следующим образом:
<?php
  $bufer 
file_get_contents("$link"); 

  
// Текст 
  
$pos_str strpos($bufer,"<td valign=\"top\" colspan=\"2\" class=\"createdate\">");
  
$pos_str strpos($bufer,"<td valign=\"top\" colspan=\"2\">",$pos_str); 
  
$pos_end strpos($bufer,"</td>",$pos_str); 
  
$text substr($bufer,$pos_str$pos_end $pos_str);
  echo 
$text;
?>

   
 
 автор: smertnik   (08.09.2005 в 05:08)   письмо автору
 
   для: cheops   (27.08.2005 в 13:40)
 

А как считать только 1 блок текса? Пытался разными вариантами это реализовать но ни чего не вышло.

<?php 
 $link 
"http://blagoslovenie.msk.ru/publisher/index.php?option=com_content&task=view&id=887&Itemid=47";
  
$bufer file_get_contents("$link"); 

  
// Текст 
  
$pos_str strpos($bufer[$i],"<P align=\"justif\">");
  
$pos_end strpos($bufer,"</P>",$pos_str); 
  
$text substr($bufer,$pos_str$pos_end $pos_str); 
  echo 
$text
?> 

   
 
 автор: cheops   (08.09.2005 в 12:55)   письмо автору
 
   для: smertnik   (08.09.2005 в 05:08)
 

Один блок это первый параграф или имеется ввиду что-то другое?

   
 
 автор: smertnik   (08.09.2005 в 13:02)   письмо автору
 
   для: cheops   (08.09.2005 в 12:55)
 

Только эту часть:

— Ваше Высокопреосвященство, при взгляде на систему ценностей, утвердившуюся в наши дни, верующих людей охватывает настоящая паника: многие уже впрямую говорят о том, что современная цивилизация неотвратимо катится к гибели, деморализация общества достигает всеохватных размеров. Что, по Вашему мнению, сегодня происходит с человеком, с его душой, с его ценностными ориентирами? Как Вы можете охарактеризовать духовное состояние нынешнего поколения?

   
 
 автор: cheops   (08.09.2005 в 14:19)   письмо автору
 
   для: smertnik   (08.09.2005 в 13:02)
 

Это можно сделать при помощи следующего скрипта
<?php 
  $bufer 
file_get_contents($link); 

  
// Текст 
  
$pos_str strpos($bufer,"<td valign=\"top\" colspan=\"2\" class=\"createdate\">"); 
  
$pos_str strpos($bufer,"<td valign=\"top\" colspan=\"2\">",$pos_str); 
  
$pos_str strpos($bufer,"<p align=\"justify\">",$pos_str); 
  
$pos_end strpos($bufer,"</p>",$pos_str); 
  
$text substr($bufer,$pos_str$pos_end $pos_str); 
  echo 
$text
?>

   
 
 автор: smertnik   (08.09.2005 в 19:24)   письмо автору
 
   для: cheops   (08.09.2005 в 14:19)
 

Спасибо большое за обьяснение, хоть чего то стал понимать, а с регулярные чуствую еще очень долго буду разбираться.

   
Rambler's Top100
вверх

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