| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Парсинг веб страницы |
| Автор: 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 | ||
my point был в том, что при использовании перла нужно будет писать каждый раз скрипт для каждой страницы. А мне надо сделать универсальное средство которое само составляло бы для себя алгоритм хоть под яндекс-темы блогов хоть под винград-новые темы в разделе Алгоритмы. и это всё для пользователя который умеет только в хтмль тексте выделить текст "Евгений Чичваркин объявлен в федеральный розыск" |
| Автор: gcc 24.1.2009, 14:36 |
| вытащить страницу и перебрать "<tr> " Привет: мир?"<tr> " есть нужно "мир?", то это легко делается... просто сходу сейчас не напишу, давно не парсил... посмотрите регулярные выражения |
| Автор: America 24.1.2009, 15:01 |
| я думал по поводу регулярных выражений. Только как составить регулярные выражения которые смогли бы так дёргать классно? gcc, ещё раз, проблема не в том чтобы написать один раз скрипт для выдёргивания чего-то из страницы. Это делается на раз два три. Проблема намного шире - задача написать систему котрая дёргала бы не для конкретной страницы, а проанализировав то что есть и то что требуется дёргала бы из любой страницы любые данные ( конечно с оговоркой что она имеет схожую структуру с теми которые ей были выданы в качестве примера) То есть всё намного шире. Нужен не алгоритм дёрганья. А алгоритм создания алгоритма дёрганья. |
| Автор: America 25.1.2009, 14:57 |
| Ну что молчим? Я знаю что сложно. Я уже три алгоритма обдумал и попытался реализовать. Во всех трёх случаях натыкаюсь либо на бешеную рекурсию, либо на огромный перебор, либо на то и другое вместе. Любые идеи wellcome. |
| Автор: America 7.3.2009, 17:37 |
| За полтора месяца всё таки я это сделал. |
| Автор: Katharos 7.3.2009, 18:37 |
| если не сложно, напиши пожалуйста как ОНО работает, в общих чертах, так сказать )) |