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

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

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

 

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

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

тема: Как из html страницы получить нужные данные
 
 автор: Игорь_О   (03.04.2005 в 23:51)   письмо автору
 
 

Подскажите плиз как лучше решить следующую задачу:

есть файл 1.html

<html><body>
<OL class=results>
<LI><A class=title href="http://auto.vl.ru/" onclick="r(this, 'ctya')" 
  target=_blank>"Авто Владивосток" - продажа японских автомобилей</A><BR>База 
  объявлений о продаже подержанных машин. Каталог автомобилей и мотоциклов 
  (модель, год выпуска, цена). Стоимость и порядок услуг по помощи в 
  приобретении автомобиля и доставке.
  <DIV class=url><SPAN style="COLOR: rgb(0,102,0)">auto.vl.ru</SPAN><SPAN 
  class=black> —&nbsp;&nbsp;&nbsp;&nbsp;Регион:&nbsp;<A 
  href="http://geo/Russia/East/Vladivostok/cat/Automobiles/Motorcicles/" 
  onclick="r(this,'ctya')">Владивосток</A></SPAN> </DIV>
  <UL></UL>
  <DIV class=more><A 
  href="http://search.ru/allfromres=421431&amp;rpt=rs2">Все 
  подразделы</A>&nbsp;(4) </DIV>

<LI><A class=title href="http://www.moto.ru/" onclick="r(this, 'ctya')" 
  target=_blank>"Moto.ru" - виртуальный мото-клуб</A><BR>Конференции байкеров, 
  виртуальный магазин аксессуаров, мотоистории и мотоанекдоты. Бесплатная почта, 
  фотоальбом, материалы о водительских правах, марках мотоциклов, советы 
  механика.
  <DIV class=url><SPAN style="COLOR: rgb(0,102,0)">www.moto.ru</SPAN><SPAN 
  class=black> —&nbsp;&nbsp; </SPAN></DIV>
  <UL>
    <LI><A href="http://shop.moto.ru/" onclick="r(this, 'ctya')" 
    target=_blank>"Moto.ru" - товары для мотоциклистов</A> 
    <LI><A href="http://members.moto.ru/ural" onclick="r(this, 'ctya')" 
    target=_blank>Мотоциклы "Урал"</A> </LI></UL>
  <DIV class=more><A 
  href="http://allfromres=241150&amp;rpt=rs2">Все 
  подразделы</A>&nbsp;(4) </DIV>
</LI></OL>
<BR></BODY></HTML>


Его нужно разобрать, чтобы получилось типа:

$url= http://auto.vl.ru/
$nazurl= "Авто Владивосток" - продажа японских автомобилей
$opis= База объявлений о продаже подержанных машин. Каталог автомобилей и мотоциклов (модель, год выпуска, цена). Стоимость и порядок услуг по помощи в
приобретении автомобиля и доставке.
$testurl= auto.vl.ru

И так из каждого блока LI

Помогите пожалуйста разобраться в этом вопросе.

   
 
 автор: Игорь_О   (04.04.2005 в 07:54)   письмо автору
 
   для: Игорь_О   (03.04.2005 в 23:51)
 

Подскажите, хотя бы алгоритм, куда копать?

   
 
 автор: cheops   (04.04.2005 в 10:36)   письмо автору
 
   для: Игорь_О   (04.04.2005 в 07:54)
 

Эта задача решается при помощи регулярных выражений, в вашем случае подойдёт следующий скрипт
<?php
  
// Получаем файл
  
$buffer file_get_contents("text.txt");
  
// Регулярное выражение
  
$pattern "|<li><a[\s]+class=title[\s]+href=\"([^\"]+)\"[^>]+>([^<]+)<[^<]*[^>]+><br>([^<]+)<[^<]+[^>]+>([^<]+)<|iU";
  
// Проводим анализ
  
preg_match_all($pattern,$buffer,$outPREG_SET_ORDER);
  
// Выводим полученные данные
  
print_r($out);
?>

HTML содержится в файле "text.txt", а результат в двумерном массиве $out - смотрите содержимое страницы или выводите его в файл, там 0 элемент содержит полное вхождение и нарушает просмотр. Список тем с решением схожих задач имеется в теме по ссылке

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3110

   
 
 автор: Игорь_О   (04.04.2005 в 13:56)   письмо автору
 
   для: cheops   (04.04.2005 в 10:36)
 

Спасибо. Работает как надо.
Но еще проблема возникла:

База 
  объявлений о продаже подержанных машин. Каталог автомобилей и мотоциклов 
  (модель, год выпуска, цена). Стоимость и порядок услуг по помощи в 
  приобретении автомобиля и доставке.

Получаем вот такую строку. При записи в файл, она так и записывается с переводами строки. Как можно их убрать (перевод строки заменить на пробел, чтобы было в одну строку)?

По ссылкам сходил, вроде бы такого не встретил.
В регулярных выражениях я вобще никак. А видимо зря.

   
 
 автор: cheops (из ННГУ)   (04.04.2005 в 14:22)
 
   для: Игорь_О   (04.04.2005 в 13:56)
 

Здесь уже можно обойтись без регулярных выражений, заменив переводы \r\n на пустые строки, т.е. пропустить строку через str_replace
<?php
  $text 
str_replace("\r\n","",$text);
  
$text str_replace("\n","",$text);
?>

   
 
 автор: Игорь_О   (04.04.2005 в 21:02)   письмо автору
 
   для: cheops (из ННГУ)   (04.04.2005 в 14:22)
 

Вот спасибо.
Сейчас совсем как мне и надо было.

   
Rambler's Top100
вверх

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