Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Парсинг веб страницы


Автор: America 24.1.2009, 13:54
Описание входящей информации. 

Есть набор веб страниц со схожей структурой. То есть страницы отличаются не только данными но и самими тёгами, но очень не значительно. Например в каждой десятой  странице не три абзаца а четыре. 


Что нужно:

допустим пользователь хочет знать самую популярную тему в блогах по версии яндекса. Если зайти на сайт yandex.ru то сейчас  в разделе "сегодня в блогах" первая строчка принадлежит следующей теме: Евгений Чичваркин объявлен в федеральный розыск. 

Пользователь вводит:
поле1: yandex.ru
поле2: Евгений Чичваркин объявлен в федеральный розыск

И хочет чтобы завтра утром при запуске программы была выдана тема блога на этот день. То есть необходимо выдернуть эту информацию из веб-страницы.

Вся проблема у меня упирается в парсинг страницы. Конечно многие могут сказать что нужно использовать нейронные сети. Но если посмотреть сколько тут букв и умножить на 8 то получается очень и очень много.

Какие мои мысли (около научный бред):

1. Собираются страницы и к каждой странице своё выходное поле. (как в примере)
2. Выдвигается алгоритм по которому строиться система. 
3. Если алгоритм вывел не то он пересматривается, страница попадает в когорту "экземпляры" из пункта 1 и алгоритм  пересматривается.

Как можно построить алгоритм.

1. Понятие твёрдой дистанции. Измеряется в символах: 1 символ, 2 символа.
2. Понятие слова. Набор букв и символов например: "попа", " <br>   </br>". которые целиком входят в текст страницы.
3. Понятие повтора слова. это число вхождения слова сначала.
4 . Понятие искомого куска. Имеет начало и конец.

Алгоритм перебором формируется и имеет примерно такой вид и потом переводится на машинй язык:

1. Найди третье вхождение слова "<tr> "
      3?"<tr> "
2. Прошагай дистанцию в 12 символов.
      12>>
3. Найди первое вхождение "."
      1?"."
4. Прошагай дистанцию в 1 символ.
     1>>
5. Ты нашёл начало искомого куска.
     !!!start
6. Найди первое вхождение " "
     1?" "
7. Ты нашёл конец.
     !!!end
8. Вырежи кусок страницы от начала куска до его конца и отдай на выход.
9. Закончить работу и уйти спать.

Хотелось бы попросить у сообщества опытных алгоритмистов подсказать как создать парсинг страницы наиболее эффективным методом.




Автор: gcc 24.1.2009, 14:03
use perl or die;

Автор: America 24.1.2009, 14:11
Цитата(gcc @ 24.1.2009,  14:03)
use perl or die;

my point  был в том, что при использовании перла нужно будет писать каждый раз скрипт для каждой страницы. А мне надо сделать универсальное средство которое само составляло бы для себя алгоритм  smile 
хоть под яндекс-темы блогов
хоть под винград-новые темы в разделе Алгоритмы.

и это всё для пользователя  который умеет только в хтмль тексте выделить текст "Евгений Чичваркин объявлен в федеральный розыск" smile 

Автор: gcc 24.1.2009, 14:36
вытащить страницу  и перебрать 

"<tr> " Привет:
      мир?"<tr> "

есть нужно "мир?", то это легко делается... просто сходу сейчас не напишу, давно не парсил...
посмотрите регулярные выражения

Автор: America 24.1.2009, 15:01
я думал по поводу регулярных выражений. Только как составить регулярные выражения которые смогли бы так дёргать классно? 

gcc, ещё раз, проблема не в том чтобы написать один  раз скрипт для выдёргивания чего-то из страницы. Это делается на раз два три. Проблема намного шире - задача написать систему котрая дёргала бы не для конкретной страницы, а проанализировав то что есть и то что требуется дёргала бы из любой страницы любые данные ( конечно с оговоркой что она имеет схожую структуру с теми которые ей были выданы в качестве примера)

То есть  всё намного шире. Нужен не алгоритм дёрганья. А алгоритм создания алгоритма дёрганья. 

Автор: America 25.1.2009, 14:57
Ну что молчим?  smile 

Я знаю что сложно. Я уже три алгоритма обдумал и попытался реализовать. Во всех трёх случаях натыкаюсь либо на бешеную рекурсию, либо на огромный перебор, либо на то и другое вместе. 

Любые идеи wellcome.

Автор: America 7.3.2009, 17:37
За полтора месяца всё таки я это сделал.  smile 

Автор: Katharos 7.3.2009, 18:37
если не сложно, напиши пожалуйста как ОНО работает, в общих чертах, так сказать ))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)