парсер html на C++
Модератор: Модераторы разделов
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
парсер html на C++
недавно занимаюсь программированием, понадобилось написать парсер html страниц на предмет некой инфы(не ссылок), подскажите с помощью каких библиотек это можно реализовать.
Заранее спасибо!
Заранее спасибо!
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
да и желательно чтобы для этих библиотек была документация нормальная, нето библиотеки нахожу, а документации нету :-)
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: парсер html на C++
ну если надо просто что-то найти в тексте, думаю Qt тут прекрасно подойдет. Именно парсеров(разбор текста) я не знаю - но думаю под конкретные нужды его не составит труда написать.
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
есть специальные либы, точно есть, самому трудно такое написать, тем более опыта в этом нет, поэтому и спрашиваю про библиотеки, есть проблема в том, что те что я нашел почти не документированы
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: парсер html на C++
гм.... вы можете попытаться проанализировать часть источника заданий в моем OTDP.
он разбирает HTML-подобный исходник и создает из него XML-дерево. (несколько не так как было-бы напрямую из xhtml)
гм... мой парсер тоже несколько недокументирован, но все что есть - то по русски... в исходниках и немногочисленных доках.
Ну ещё я могу что-то подсказать.
...имхо... если знаете что такое машина состояний - там это самое сложное - то разберетесь. Ну ещё может доки по XML-классам в QT надо будет почитать. А остальное все достаточно простое.
Оно конечно там не самого лучшего вида (это было первое что я написал серьезного на QT c сигнал-слотами), но работает.
И на "реальном HTML" я его не гонял... но смотря что вам разбирать - может оно и пригодится.
он разбирает HTML-подобный исходник и создает из него XML-дерево. (несколько не так как было-бы напрямую из xhtml)
гм... мой парсер тоже несколько недокументирован, но все что есть - то по русски... в исходниках и немногочисленных доках.
Ну ещё я могу что-то подсказать.
...имхо... если знаете что такое машина состояний - там это самое сложное - то разберетесь. Ну ещё может доки по XML-классам в QT надо будет почитать. А остальное все достаточно простое.
Оно конечно там не самого лучшего вида (это было первое что я написал серьезного на QT c сигнал-слотами), но работает.
И на "реальном HTML" я его не гонял... но смотря что вам разбирать - может оно и пригодится.
-
svary
- Сообщения: 49
- ОС: Linux FC-9
Re: парсер html на C++
Вообще-то в *nix системах давным-давно существуют средства для таких задач.
В первую очередь : flex и jacc/bison :
Код: Выделить всё
FLEX(1) User Commands FLEX(1)
NAME
flex - the fast lexical analyser generator
BISON(1) BISON(1)
NAME
bison - GNU Project parser generator (yacc replacement)ну, если совсем лень разбираться. можно awk попробовать :
Код: Выделить всё
GAWK(1) Utility Commands GAWK(1)
NAME
gawk - pattern scanning and processing languageЭто все утилиты, которые генерируют ИСХОДНЫЙ ТЕКСТ НА С. но, я так понял. что именно это Вам и надо ?
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: парсер html на C++
Ну у HTML грамматика довольно сложная, с кучей всяких "опциональных" частей (можно не закрывать многие теги итп), так что писать парсер даже на flex/bison весьма трудоёмко. Знатоки C/C++, неужели для этих языков нет готовых решений этой задачи!?
Для xml (и, соответственно, xhtml) даже я решение знаю - libxml. А для html...
Что-то здесь пошла речь про c/c++, хотя автор не указал, на каком языке пишет. На python, например, есть даже несколько парсеров html, на java афаик тоже...
UPD. Ой, в название темы-то не посмотрел :) Ну ладно, пусть будет c++.
Для xml (и, соответственно, xhtml) даже я решение знаю - libxml. А для html...
Что-то здесь пошла речь про c/c++, хотя автор не указал, на каком языке пишет. На python, например, есть даже несколько парсеров html, на java афаик тоже...
UPD. Ой, в название темы-то не посмотрел :) Ну ладно, пусть будет c++.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
fbi
- Сообщения: 34
Re: парсер html на C++
boost::regex вам в помошь! Документированно и с примерами! Не привязанно к GUI! Если надо на C++ то boost выручит!
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: парсер html на C++
А в бусте чего-нибудь более конкретно для задачи автора нет? А то парсинг html с помощью регэкспов не есть гуд...
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
если действительно так, то это как раз то, что мне надо, хоршо что не привязано к гуи
а почему плохо их использовать, обоснуйте пожайлуста
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
слышал где-то вроде что не очень хорошо использовать регулярные выражения для таких целей, но мне кажется что для задач типа моей это будет оптимальный вариант
-
fbi
- Сообщения: 34
Re: парсер html на C++
А в бусте чего-нибудь более конкретно для задачи автора нет?
Нет
А то парсинг html с помощью регэкспов не есть гуд...
Полностью согласен но....
понадобилось написать парсер html страниц на предмет некой инфы(не ссылок)
Смотря как, и что парсить!! Если необходимо выдрать email адреса и т.д. то лучше регулярок не придумаешь!
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
fbi писал(а): ↑13.07.2009 13:14А в бусте чего-нибудь более конкретно для задачи автора нет?
Нет
А то парсинг html с помощью регэкспов не есть гуд...
Полностью согласен но....
понадобилось написать парсер html страниц на предмет некой инфы(не ссылок)
Смотря как, и что парсить!! Если необходимо выдрать email адреса и т.д. то лучше регулярок не придумаешь!
необходимо выдернуть инфу типа погоды, или курсов валют, из этой серии
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: парсер html на C++
Простыми регэкспами корректно распарсить html со всеми его выкрутасами просто невозможно. Вероятно, это можно сделать с помощью "трёхэтажных" регэкспов, но такой "парсер" будет совершенно невозможно поддерживать (а ну-ка найдите и исправьте ошибку в регэкспе на полэкрана...). Так что будет либо парсер, понимающий только небольшое подмножество html, либо очень сложный парсер.
Если вам не надо парсить весь html, а только вытянуть определённую инфу - смотрите сами, насколько легко будет написать регэксп для этой инфы.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
Portnov писал(а): ↑13.07.2009 16:46
Простыми регэкспами корректно распарсить html со всеми его выкрутасами просто невозможно. Вероятно, это можно сделать с помощью "трёхэтажных" регэкспов, но такой "парсер" будет совершенно невозможно поддерживать (а ну-ка найдите и исправьте ошибку в регэкспе на полэкрана...). Так что будет либо парсер, понимающий только небольшое подмножество html, либо очень сложный парсер.
Если вам не надо парсить весь html, а только вытянуть определённую инфу - смотрите сами, насколько легко будет написать регэксп для этой инфы.
может и не очень легко, но других подходящих вариантов предложено небыло
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: парсер html на C++
Можно парсить валидный xhtml как xml. Для этого есть libxml и Qt (есть SAX-парсер, сходный с libxml и DOM-парсер, который превращает XML в дерево).
А можно простой html в xhtml превратить (там, правда, есть проблема - некоторые ОЧЕНЬ наглые программисты и WYSIWYG-редакторы делают целую кучу ошибок в коде, которые сложно обрабатывать - здесь смотрите исходники Gecko или другого движка).
А можно простой html в xhtml превратить (там, правда, есть проблема - некоторые ОЧЕНЬ наглые программисты и WYSIWYG-редакторы делают целую кучу ошибок в коде, которые сложно обрабатывать - здесь смотрите исходники Gecko или другого движка).
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
я собираюсь парсить информацию только с авторитетных и звестных сайтов, думаю что проблема плохих програмистов и редакторов мне вроде как не страшна
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: парсер html на C++
ЫЫЫЫХ, МОЛъДОЙ ЧъЛОВЕЕКъ.... молодо-зелено... "код не хлебавше, да в омут без дебаггера" собираетесь? постерегитесь...
-
fbi
- Сообщения: 34
Re: парсер html на C++
Хм... из всего выше сказанного можно придти к выводу что... средств столь необходимых автору, конкретно под его задачу не существует (хотя может просто я про них не знаю). Автору не надо заниматься синтаксическим анализом html, а надо всего навсего получить какуюто информацию находящуюся на странице. На мой взгляд лучшим выходом было бы использовать регулярные выражения, а дальше смотрите сами. Возможно если luncher приведёт конкретный пример для рабочей задачи можно будет сказать что-то более конкретно!
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: парсер html на C++
Вот вот...
Имхо, вообще лучше использовать нечто нетребующее компиляции. Ведь странички то могут переверстать (хотя можно предусмотреть некоторые шаблоны и маски.
Регекспами распарсить вполне реально. Только не надо стараться сразу схватить одним выражением весь код. Както нужно было сделать это на php... если коротко, то парсил кажды тэг и сразу засовывал в многоуровниевый массив (по сути отражавший структуру документа).... Правда мне в процессе и сам массив этот был нужен.....
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: парсер html на C++
Есть много даже достаточно известных сайтов, разработчики которых забивают на валидность. Не стоит доверять сайтам, на которых написано, что они валидны (я однажды нашел сайт, на котором написано снизу, что он валидный XHTML 1.0 Strict, так он оказался не XHTML 1.0 Strict, а HTML 4.01 Transitional, и содержал 3 ошибки).
UPD. Кстати, Linuxforum не валидный, Google тоже.
-
altwazar
- Сообщения: 427
- Статус: Zz
- ОС: Calculate
Re: парсер html на C++
Я когда с подобным столкнулся, не делал парсеров html (сложновато для такой задачи). Просто получал страничку и седом выкусывал из нее нужные данные.
-
aikus
- Сообщения: 6
Re: парсер html на C++
Если написание на C++ не принципиально, то можно посмотреть в сторону java, php etc. Там есть штатные и хорошо документированные средства.
Также можно немного почитать про программирование на платформе mozilla (я javascript имею ввиду).
Если на выходе нужен нативный код, то, как уже было сказано, можно покурить исходники браузерных движков, или ту же реализацию для php, java.
ИМХО. Наиболее простой способ - мозиловский javascript
Также можно немного почитать про программирование на платформе mozilla (я javascript имею ввиду).
Если на выходе нужен нативный код, то, как уже было сказано, можно покурить исходники браузерных движков, или ту же реализацию для php, java.
ИМХО. Наиболее простой способ - мозиловский javascript
-
komcumir
- Сообщения: 273
- ОС: Alt 5.0
Re: парсер html на C++
а разве perl не лучше всех с этим справится?
-
luncher
- Сообщения: 84
- ОС: mandriva 2008 spring
Re: парсер html на C++
perl а не знаю, с php дружу, но мне хотелось бы именно на C++
P.S. в пхп действительно это очень просто сделать
P.S. в пхп действительно это очень просто сделать
-
komcumir
- Сообщения: 273
- ОС: Alt 5.0
-
fbi
- Сообщения: 34
Re: парсер html на C++
Если чесно считаю писать на си++ такое это извращение... Для каждого случая есть свой инструментарий... В вашем случае perl, php, tcl
Извращение знать по чуть-чуть кучу языков - вот это извращение! Если человек знает C++, и это знание не ограничивается только "Hello world", то естественно удобнее будет это делать на C++, и ни на чем больше!
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: парсер html на C++
Все извращение в том, что для работы с RegExp и парсинга XML используются сторонние библиотеки?
С RegExp в C++ не работал, а XML парсил (намного удобнее, чем в PHP)(когда-то пробовал написать конвертер docx в xhtml, забросил когда в OpenOffice появилась поддержка docx, на данный момент мой конвертер конвертирует только довольно простые тексты с картинками и частично переваривает таблицы, я так и не понял смысл многих docx-тегов (спецификации не нашел)).
-
komcumir
- Сообщения: 273
- ОС: Alt 5.0
Re: парсер html на C++
ИМХО до PHP5 возможно, в 5 php парсинг xml просто не требуется как таковой он сам за вас все делает...
Судя по топиктстартеру С++ он настолько не знает...
-
aikus
- Сообщения: 6
Re: парсер html на C++
понимаю, что можем свалиться в священные войны, но всё же выскажусь.
Язык - это не цель, а инструмент для её достижения. Т.е. не плохо, если человек знает не один язык и способен выбирать между известными ему инструментами. С Вами, fbi, согласен, что если программист плохо ориентируется в выбранном инструменте, то это без условно плохо.