LinuxForum.Fans
Тема

Парсинг на Perl

Автор: u__________12 17 сообщений 4088 просмотров
#272237
text
/usr/bin/perl -w
use LWP::Simple;
use HTML::Parse;
use HTML::FormatText;
my $content = get("http://site.ru/forum");
$site = HTML::FormatText->new->format(parse_html($content));
print $site;

Получается вот такого вида выдача


Куча ненужного

Вход

Имя пользователя: Пароль: Автоматически входить при каждом посещении


Распадется ли Российская Федерация? (63)
Лежачие полицейские на ул. Лукашина (9)
Про "PUSSY RIOT" (ОПРОС НЕДЕЛИ) (138)
Анекдоты, приколы... (672)
Отремонтировали дорогу (105)
разбор 2109 (1)
Карта города N скачать (84)
Продаю Шевроле Авео 2010 г. (0)
Где в N купить пластиковые окна дешево ? (17)
Демотиваторы (было "Подборочка") (225)

Куча ненужного

Мне нужно ТОЛЬКО список активных тем.

Распадется ли Российская Федерация? (63)
Лежачие полицейские на ул. Лукашина (9)
Про "PUSSY RIOT" (ОПРОС НЕДЕЛИ) (138)
Анекдоты, приколы... (672)
Отремонтировали дорогу (105)
разбор 2109 (1)
Карта города N скачать (84)
Продаю Шевроле Авео 2010 г. (0)
Где в N купить пластиковые окна дешево ? (17)
Демотиваторы (было "Подборочка") (225)

Как это сделать?

#272247

А с помощью регулярок, по тегам не проще сделать?

#272301

Как? И Ещё есть варианты?

#272308
"Сергей В." написал:
Как?

Нужно видеть html-исходник...

#272340
"Сергей В." написал:

Можно попробовать такую закономерность -

<tr><td class="row_ftext"><strong><a style=Любой текст>Малые объёмы песка и щебня</a></strong></td>
#272372

Список тем меняется. В том и загвоздка, что надо выводить список активных тем.

#272376

Ни на что не претендуя...
[console]
lupo@gentoo-laptop /tmp % wget http://www.schekino.net/forum/
--2012-08-27 18:05:40-- http://www.schekino.net/forum/
Распознаётся www.schekino.net... 78.47.50.182
Подключение к www.schekino.net|78.47.50.182|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: нет данных [text/html]
Сохранение в: «index.html»

[ <=> ] 78 091 221KB/s за 0,3s

2012-08-27 18:05:41 (221 KB/s) - «index.html» сохранён [78091]

lupo@gentoo-laptop /tmp % lynx -dump index.html | grep "Имя пользователя" -A 13 | sed '1,3d'
[38]Распадется ли Российская Федерация? (73)
[39]Отремонтировали дорогу (110)
[40]Лежачие полицейские на ул. Лукашина (10)
[41]Про "PUSSY RIOT" (ОПРОС НЕДЕЛИ) (138)
[42]Анекдоты, приколы... (672)
[43]разбор 2109 (1)
[44]Карта города Щекино скачать (84)
[45]Где в Щекино купить пластиковые окна дешево ? (17)
[46]Демотиваторы (было "Подборочка") (225)
[47]День города Щекино 2012 (4)
__________________________________________________________________
[/console]

#272410

Lupo Alberto, вы прям фокусник !

"-=Serj=-" написал:
Можно попробовать такую закономерность -
<tr><td class="row_ftext"><strong><a style=Любой текст>Малые объёмы песка и щебня</a></strong></td>
"Сергей В." написал:
Список тем меняется. В том и загвоздка, что надо выводить список активных тем.

Дык, вроде, работает... Мой вариант традиционно на Питоне (правда Python3, т.к. на сайте кодировка cp1251):

text

#!/usr/bin/env python3
#_*_ coding: utf-8 _*_

import urllib.request import re import sys

def Find(patt, text): match = re.findall(patt, text) if match: for stroka in match: print (stroka) else: print ('Ничего не нейдено...') u = urllib.request.urlopen(sys.argv[1]) data = u.read().decode('cp1251') patt = re.compile(r'<tr><td class="row_ftext"><strong><a style=.+?>(.+?)</a></strong></td>') Find(patt, data) u.close()

[console]$ ./parser.py http://www.schekino.net/
Про &quot;PUSSY RIOT&quot; (ОПРОС НЕДЕЛИ)
Распадется ли Российская Федерация?
Отремонтировали дорогу
Наша полиция нас бережет
Натяжные потолки от roof71.ru
Малые объёмы песка и щебня
Лежачие полицейские на ул. Лукашина
[/console]

#272412
"-=Serj=-" написал:
вы прям фокусник !http://linuxforum.ru/extensions/bbcode_smiles/img/ab.gif

...по рукам надо бить за такие «фокусы» :(

#272413
Lupo Alberto написал:
[quote="-=Serj=-"]вы прям фокусник !http://linuxforum.ru/extensions/bbcode_smiles/img/ab.gif

...по рукам надо бить за такие «фокусы» :([/quote]
Почему же?

#272415

Коряво это, и правильнее бы парсить непосредственно исходный код страницы, а ещё лучше RSS-сайта.

#272417

...а ещё лучше, с помощью curl или wget логиниться, и получать ссылку с активными новостями, и её уже и «парсить».

#272418

А как тоже самое но на перле? Простите пож. я вообще новичёк в каком-либо программинге.

#272420
"Сергей В." написал:
А как тоже самое но на перле?

Ну, тут я пас...
Читайте, как эту регулярку применить

text
<tr><td class="row_ftext"><strong><a style=.+?>(.+?)</a></strong></td>

на Perl, либо ждите того, кто знает...

#272467
Сергей В. написал:
А как тоже самое но на перле? Простите пож. я вообще новичёк в каком-либо программинге.

на перловке не буду. Ибо лениво. Да и задача не для перловки - слишком проста. Вот на sed
[console]$ wget -O - "http://www.schekino.net/forum/" 2>/dev/null | sed -rn '\~<div id="recent">~,\~</div~{s~.*<a [^>]+>(.+)</a>.*~\1~p}'
Распадется ли Российская Федерация? (87)
Про &quot;PUSSY RIOT&quot; (ОПРОС НЕДЕЛИ) (141)
Цитаты (55)
Наша полиция нас бережет (21)
Отремонтировали дорогу (111)
Лежачие полицейские на ул. Лукашина (10)
Анекдоты, приколы... (672)
разбор 2109 (1)
Карта города Щекино скачать (84)
Где в Щекино купить пластиковые окна дешево ? (17)
Активные темы
[/console]
Оно?
quot и последнюю строчку сами правьте,
ссылка: http://drbatty.ru/sed/

#272589

Ладно. Всем огромное спасибо, тему можете закрыть.

Войдите или зарегистрируйтесь, чтобы ответить.