Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 18:43   #1
Eclipze
 
Регистрация: 21.01.2011
Сообщений: 6
По умолчанию Универсальный парсер

Здравствуйте, есть задание. Нужно написать универсальный парсер, с использованием регулярных выражений. Для начала нужно хотя бы, чтобы прога умела парсить такой ресурс как kinopoisk.ru, выдавая при этом название фильма, год, страну, актеров и т.д. Может кто писал такое. Буду благодарен за любые данные. Заранее спасибо
Eclipze вне форума Ответить с цитированием
Старый 25.01.2011, 11:35   #2
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

100% универсальных парсеров не существует.
Парсеры (а точнее говоря граберы) пишутся обычно под конкретный сайт. Все универсальные оболочки (я их уже перебрал ради интереса несколько штук) опять же донастраиваются под конкретные сайты.
А так, написать по конкретному ТЗ парсер - не особая проблема, если конечно никаких хитрых защит на сайте не стоит.

А насчет информации как писать парсер. Алгорит у них всех весьма примитивный.
1. получить страницу
2. собрать по необходимости с нее ссылки.
3. собрать необходимую информацию.

и так пока есть ссылки.
Для получения страницы пользовать Indy, Overbyte ICS, synapse.
Для выдергивания ссылок - либо поиск в тексте стандартными функциями, либо найти библиотеки и пользовать регулярные выражения. С регулярными выражениями по началу конечьно не столь легко, но потом жизнь становиться проще
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно

Последний раз редактировалось Mifody; 25.01.2011 в 11:39.
Mifody вне форума Ответить с цитированием
Старый 25.01.2011, 12:54   #3
Eclipze
 
Регистрация: 21.01.2011
Сообщений: 6
По умолчанию

Огромное спасибо за ответ. Вчера долго очень парился над всем этим, но в итоге написал парсер под сайт кинопоиск.ру, получаю список страниц и названия фильмов с них. Как это все работает разобрался. Но вот столкнулся с проблемой регулярных выражений. Никогда раньше не приходилось с ними сталкиваться. Может кто-нибудь может подсказать литературу по ним. Заранее спасибо.
Eclipze вне форума Ответить с цитированием
Старый 25.01.2011, 13:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, навскидку:
Mastering Regular Expressions (Jeffrey E.F. Friedl) (издание O'Reilly)
Регулярные выражения (Дж. Фридл) (то же, но на русском)
Регулярные выражения. 10 минут на урок Автор: Бен Форта

а ещё, Вы же в Delphi будете библиотечку для работы с регулярными выражениями ставить? Так вот, в TRegExpr в комплекте очень неплохая документация и примеры...

Последний раз редактировалось Serge_Bliznykov; 25.01.2011 в 13:25.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.01.2011, 15:11   #5
Eclipze
 
Регистрация: 21.01.2011
Сообщений: 6
По умолчанию

Цитата:
100% универсальных парсеров не существует.
Парсеры (а точнее говоря граберы) пишутся обычно под конкретный сайт.
Я с вами в принципе согласен, очень сложно даже придумать способ универсального парсинга. Но в то же время, почему бы и нет? Возможно все=)) Нужно только постараться. Вот у меня сейчас такая задача от заказчика. И честно говоря пока не знаю как это осуществить(все сайты разные и с разным набором данных). Вообщем буду искать решение данной задачи. И буду благодарен за идеи=))

Написание парсера идет хорошо, но вот столкнулся еще с одной проблемой. Изначально прога парсила страницы сайта по id. А как быть если у страницы нет id?
Т.е. как получить список нужных страниц на сайте? Очень нужно решение этой проблемы.

Последний раз редактировалось Stilet; 27.01.2011 в 17:49.
Eclipze вне форума Ответить с цитированием
Старый 25.01.2011, 18:04   #6
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

Цитата:
как получить список нужных страниц на сайте?
Так ведь это одна из составляюих парсинга. Все ссылки на сайте есть (иногда правда приходится открыть несколько страниц, для того, что бы добраться до нужной). Определяете параметры необходимых ссылок и забираете только нужные
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 27.01.2011, 16:28   #7
Eclipze
 
Регистрация: 21.01.2011
Сообщений: 6
По умолчанию

Доброго времени суток всем. Подскажите пожалуйста, как получить список всех ссылок со страницы. Парсер пишу с использованием URLMon, страницу получаю с помощью URLDownloadFile. Заранее спасибо.
Eclipze вне форума Ответить с цитированием
Старый 27.01.2011, 17:53   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как получить список всех ссылок со страницы.
В цикле. Ищешь через Pos подстроку "<a href="
Удаляешь процедурой delete все до найденной позиции
Выбираешь через сору данные начиная с 1 до первой >. И опять поиск через Роs.

Тут подобные уже обсуждались парсеры. Вот например:http://www.programmersforum.ru/showthread.php?t=108856
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2011, 18:02   #9
Eclipze
 
Регистрация: 21.01.2011
Сообщений: 6
По умолчанию

Спасибо за ответ!
Со списком всех ссылок я разобрался. Теперь новая задача, нужно вывести только однотипные ссылки. Например в тексте которых встречается: "/video/index/". Тут наверно только с помощью регулярок можно что-то сделать. Или я ошибаюсь?
Eclipze вне форума Ответить с цитированием
Старый 27.01.2011, 18:07   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
В цикле. Ищешь через Pos подстроку "<a href="
Удаляешь процедурой delete все до найденной позиции
Выбираешь через сору данные начиная с 1 до первой >. И опять поиск через Роs.
Виталий, это удар по скорости, PosEx куда лучше.

Цитата:
Теперь новая задача, нужно вывести только однотипные ссылки. Например в тексте которых встречается: "/video/index/". Тут наверно только с помощью регулярок можно что-то сделать. Или я ошибаюсь?
ошибаетесь, кто мешает найденную ссылку проверить на ваше условие?(тот же Pos)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Универсальный запрос Kostya777 Microsoft Office Access 2 17.11.2010 20:04
Универсальный парсер gamer123 Общие вопросы Delphi 20 10.08.2010 09:23
Универсальный Инсталятор скриптами и Delphi Jenya Свободное общение 4 14.10.2009 15:21
Delphi и АСМ. универсальный запуск Пепел Феникса Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 22.09.2009 20:18
Универсальный стилизатор исходного кода Eldarion Помощь студентам 3 26.04.2009 19:02