Автор Тема: HTML parse  (Прочитано 4554 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« : 28 Сентября 2004, 13:32:47 »
извинте, что я к вам обращаюсь... :)
привет!
Что-то никак у меня не получается из html-файла достать нужное... :( Помогите, подскажите, пожалуйста.
Есть такой файл:

мета тэги
несколько абзацев

(хотя их может и не быть)

Бабушка, расскажи сказку!
В некотором царстве, некотором государстве была огромная гора.
И посреди той горы зияла огромная нора. А в норе той была большая хрустальная комната
 с большой хрустальной кроватью посередине.
 И спала на той кровати заколдованным сном прекрасная принцесса.
 И, чтобы расколдовать ее, должен был придти прекрасный принц и поцеловать ее...
 Бабушка умолкает.
 - Ба, ну и как, расколдовали ее?
 - Какой там, внученька! Они хоть и прынцы но все равно - козлы!
 Прожила до семидесяти, шестерых родила - да так и не проснулась!..


еще несколько или один



Мне нужно достать все от Б и до

.
делаю так:
читаю файл в массив @indata,
for (@indata) {  $content = ($_=~ /(<span class="abz">.*<\\/p>)/);   }
print \
'
$content = \',$content;

получаю:
$content =
« Последнее редактирование: 28 Сентября 2004, 13:43:30 от AnnA »
пока-пока. :)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« Ответ #1 : 28 Сентября 2004, 13:39:59 »
блин. а что - нельзя своё сообщение отредактировать теперь? Вон оно какое длиннющее получилось. :(
и почему-то съелся экран для слэща в регекспе. :(
$content = ($_=~ /(.*<\\/p>)/);
пока-пока. :)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
HTML parse
« Ответ #2 : 28 Сентября 2004, 14:16:59 »
AnnA поставь ключ s

$content = ($_=~ /(.*<\\/p> )/s);

тогда под символом \'.\' точка будет подразумеваься ЛЮБОЙ СИМВОЛ ВКЛЮЧАЯ СИМВОЛЫ НОВОЙ СТРОКИ
 в исканиях.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« Ответ #3 : 28 Сентября 2004, 14:28:36 »
Green Kakadu не-а. пасиба за совет.
я пробовала и так, и так:
$content = ($_=~ /(.*<\\/p> )/s);
$content = ($_=~ /(.*<\\/p> )/sg);
не хочет. "каменный цветок"
пока-пока. :)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
HTML parse
« Ответ #4 : 28 Сентября 2004, 14:34:40 »
AnnA хочет:

/()/s

твоя ошибка:

 /(.*<\\/p>ПРОБЕЛ )/

Пробела там нет :) вот и не хотел.

P.S. чего-то форум показал так, будто и у меня пробел есть между <\\/p>и)   :) а его там быть не должно
 в исканиях.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
HTML parse
« Ответ #5 : 28 Сентября 2004, 14:40:14 »
ключ g как я понимаю тебе не нужен - у тебя лишь одно включение данного блока будет?
 в исканиях.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« Ответ #6 : 28 Сентября 2004, 16:24:16 »
Green Kakadu вот вашими бы устами да мёд пить. :)
$content = ($_=~/()/s);
не работает. :(
а пробела, да - его и не было в моём примере тоже. чего-то форум меня так подредактировал. :)

Цитировать
Green Kakadu:
у тебя лишь одно включение данного блока будет?

ага. совершенно одно. :)
спасибо за помощь. Я уже даже начала разбираться в HTML::Parser ради такого случая. охо-хо... Странно что не работает, правда? Или у вас всё получилось, пробовали?
пока-пока. :)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« Ответ #7 : 28 Сентября 2004, 17:07:10 »
в общем вот так получилось у меня вытянуть этот текст зловредный:use HTML::TokeParser;
  
my $pt HTML::TokeParser->new($p);
  while (
my $token $pt->get_tag("span")) {
       
$content $pt->get_trimmed_text("/p");

  }

здесь $p - путь к файлу. таких файлов у меня около 2 тыс и всякий раз файл выбираю через rand.
может есть более лёгкий способ выудить этот текст?
пока-пока. :)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
HTML parse
« Ответ #8 : 28 Сентября 2004, 17:22:52 »
Цитировать
Или у вас всё получилось, пробовали?

пробовал, у меня работает.
кодЖ
---------------------------------------------------------------------

#!/usr/bin/perl
my $text=qq~
мета тэги
несколько абзацев

(хотя их может и не быть)

Бабушка, расскажи сказку!
В некотором царстве, некотором государстве была огромная гора.
И посреди той горы зияла огромная нора. А в норе той была большая хрустальная комната
 с большой хрустальной кроватью посередине.
 И спала на той кровати заколдованным сном прекрасная принцесса.
 И, чтобы расколдовать ее, должен был придти прекрасный принц и поцеловать ее...
 Бабушка умолкает.
 - Ба, ну и как, расколдовали ее?
 - Какой там, внученька! Они хоть и прынцы но все равно - козлы!
 Прожила до семидесяти, шестерых родила - да так и не проснулась!..


еще несколько или один


~;
$text=~/()/s?print $1 : print \'нету ничего\';
 в исканиях.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
HTML parse
« Ответ #9 : 28 Сентября 2004, 17:36:00 »
у меня-тотекст в массиве. ну да сама виновата, наверное. не совсем точно задачу описала. а у меня это не работает. Вернее ваш пример - работает, а вот регексп для массива - увы. :)
только кодом, который я привела выше и получается достать нужный текст. сама удивляюсь. :) Пасиба вам ещё раз запомощь. ;)
пока-пока. :)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
HTML parse
« Ответ #10 : 28 Сентября 2004, 17:52:42 »
Цитировать
у меня-тотекст в массиве.

ээ.. построчно што ли? Тогда :) тогда о каких регекспах может идти речь, если проверяют лишь строку?
есть 2 варианта:
1 считывать все-таки в одну переменную
2 вот так:
----------------------------------------------------

join("\\n",@text)=~/()/s?print $1:print \'нет такого\';


3 если вы поподробнее опишете как это все выглядит (может в массиве много страниц?) то можно еще подумать.
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28