Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/113: Рейтинг темы: голосов - 113, средняя оценка - 4.55
10 / 10 / 2
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1

Парсер HTML

01.01.2011, 09:47. Показов 22168. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нигде не могу найти парсера HTML на Си/С++, помогите кто чем может!

На PHP все просто выходит в две строки, но надо именно на С++ для реализации многопоточности

Например такая строка
HTML5
1
<h2><a href="http://www.site.ru/something/" rel="bookmark" title="Текст1">Текст2</a></h2>
Нужно получить ссылку и текст2.
На пхп все реализуется в две строки:
PHP
1
2
$grab = file_get_contents("http://www.site.ru");//скачиваем страницу
preg_match("/<h2><a href=\"(.*)\/"[^\"]/",$grab,$urls);//разбираем ее регулярным выражением
Как тоже самое реализуется на Си?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.01.2011, 09:47
Ответы с готовыми решениями:

Вопрос про Парсер HTML с помощью Indy
Доброе время суток... У меня возникла проблема... Собираю парсер html, и когда вытягиваю из страницы код методом...

HTML парсер
Доброе время суток. Проблема такова: Читаю с помощью WebClient хтмл, сайта. Нахожу тайтл с помощью регулярных выражений, если...

HTML Парсер
Помогите кто-нибудь написать парсер html страницы на php. Парсить нужно http://raduga.obogatim.ru/afisha/. Нужно только картинку фильма и...

35
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
09.08.2012, 12:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от koldun Посмотреть сообщение
p=One.Pos("[");
C++
1
p=One.Pos("[")+1;
Цитата Сообщение от koldun Посмотреть сообщение
как можно его заставить сканить весь текст ?
C++
1
One.Delete(1,p2);
1
10 / 10 / 2
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
27.10.2012, 23:38  [ТС]
QVO, спасибо но это немного не то, постараюсь объяснить...

Задача состоит вот в чем. Начнем с простого.
Есть вебстраница формата пример razbor1.htm
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr> 
<td><b>
Требуются: каменщики, разнорабочие, штукатуры Tел. 93-22-51, 65-52-55</b></td>
</tr>          
</tbody></table>
<br>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr> 
<td>
Требуются кладовщики Tел. 54-19-30</td>
</tr>
</tbody></table>
<br>
<table align="center" border="1" cellpadding="0" cellspacing="0" width="600">
<tbody><tr> 
<td><b>
Требуются разнорабочие Tел. 066-672-26-23</b></td>
</tr>          
</tbody></table>

Необходимо привести к разобранному виду и занести в таблицу
Требуются: каменщики, разнорабочие, штукатуры Tел. 93-22-51, 65-52-55
Требуются кладовщики Tел. 54-19-30
Требуются разнорабочие Tел. 066-672-26-23
Ну и вот еще razbor2.htm
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <table cellSpacing=0 cellPadding=0 width="100%" border="0" class="pdr">
 <tr>
  <td><b>Год выпуска:</b></td>
  <td class="a_r">2011 г.</td>
 </tr>
 <tr><td class="sep_h" colspan="2"><img src="/img/z.gif" width="1px" height="1px" alt="" /></td></tr>
 <tr>
  <td><b>Тип техники:</b></td>
  <td class="a_r">Мотоцикл</td>
 </tr>
 <tr><td class="sep_h" colspan="2"><img src="/img/z.gif" width="1px" height="1px" alt="" /></td></tr>
 <tr>
  <td><b>Состояние:</b></td>
  <td class="a_r">отличное</td>
 </tr>
 </tr>
Аналогично необходимо убрать весь мусор(html теги) и получить на выходе табличные данные
Год выпуска: 2011 г.
Тип техники: Мотоцикл
Состояние: отличное
Покажите пожалуйста, буду рад любой помощи
Вложения
Тип файла: rar Razbor.rar (46.1 Кб, 25 просмотров)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.10.2012, 23:52
Есть еще такая либа https://www.cyberforum.ru/blog... og538.html.

Но я бы использовал boost/regex - как бы проще. ( если парсить не много )

boost/regex Поиск ссылок в html-файле
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
28.10.2012, 02:26
Egeni, А как же regex.h? А boost? Или же поковыряйте библиотеку QT, там есть класс QRegExp. Под крайний случай подключите скриптовые языки (Python,Ruby,Lua), в них есть возможности для регулярных выражений. Думаю Вам будет быстрее понять основы языка Lua(А этого будет достаточно, для вашей цели. Да даже просто напишите скрипт, немного погуглив, и подключите его), чем искать нативное решение целый год, да и он пригодиться в жизни.
Советую почитать http://blog.alno.name/ru/2008/10/using-boost-regex , там есть альтернатива пхпешной функции preg_match, вот boost::regex_match.
А если лень читать и много писать, то вот для Borland C++ (Delphi) http://regexpstudio.com/ru/TRegExpr/TRegExpr.html
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
28.10.2012, 12:53
Вот тема о том, как прикручивать скрипты на Lua: https://www.cyberforum.ru/cpp-... 68085.html

Я бы такую задачу выполнял именно на Lua, но не на встроенных паровозах типа boost, Qt, regex. И вот почему. Формат страницы со временем может немного меняться и от тебя это никак не зависит (если я правильно понимаю). А потому время от времени может понадобиться вносить изменения в парсер. На одной чаше весов программа, для которой при изменении в парсере требуется перекомпиляция. Другими словами, если ты не хочешь никому отдавать исходник, то пользователи твоей программы уже ничего не смогут сделать, если что-то на сайте поменялось. На другой чаше весов программа, для которой НЕ требуется перекомпиляция, а требуется исправить скрипт на lua, который идёт в комплекте с программой. На крайний случай пользователь сам сможет поправить парсер, а потому для пользователя такой вариант выглядит более привлекательным
2
10 / 10 / 2
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
29.10.2012, 10:17  [ТС]
Evg, у тебя есть работающие примеры таких программ парсеров?

Avazart, Vlad_IT, если можно с примерами пожалуйста...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2012, 12:00
Цитата Сообщение от Egeni Посмотреть сообщение
Evg, у тебя есть работающие примеры таких программ парсеров?
Есть, только выдранное из контекста оно тебе вряд ли чем-то поможет
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 13:16
Цитата Сообщение от Egeni Посмотреть сообщение
Avazart, Vlad_IT, если можно с примерами пожалуйста...
А я на что ссылку кинул?
Цитата Сообщение от Avazart Посмотреть сообщение
Есть еще такая либа https://www.cyberforum.ru/blog... og538.html

Но я бы использовал boost/regex - как бы проще. ( если парсить не много )

boost/regex Поиск ссылок в html-файле
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2012, 13:26
Цитата Сообщение от Egeni Посмотреть сообщение
Avazart, Vlad_IT, если можно с примерами пожалуйста...
Иногда полезно читать те ссылки, которые тебе дают: https://www.cyberforum.ru/cpp-... ost1651285
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 16:23
Evg, А чем собственно вызвана необходимость использовать LUA ?
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2012, 16:40
Цитата Сообщение от Avazart Посмотреть сообщение
Evg, А чем собственно вызвана необходимость использовать LUA ?
В посте #25 всё написал
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 16:44
Цитата Сообщение от Evg Посмотреть сообщение
Формат страницы со временем может немного меняться и от тебя это никак не зависит (если я правильно понимаю). А потому время от времени может понадобиться вносить изменения в парсер. На одной чаше весов программа, для которой при изменении в парсере требуется перекомпиляция. Другими словами, если ты не хочешь никому отдавать исходник, то пользователи твоей программы уже ничего не смогут сделать, если что-то на сайте поменялось. На другой чаше весов программа, для которой НЕ требуется перекомпиляция, а требуется исправить скрипт на lua, который идёт в комплекте с программой. На крайний случай пользователь сам сможет поправить парсер, а потому для пользователя такой вариант выглядит более привлекательным
А как тут поможет lua ?
С таким же успехом можно просто подгружать boost- регулярку с файла ( к примеру в ComboBox или Edit)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2012, 17:33
Цитата Сообщение от Avazart Посмотреть сообщение
А как тут поможет lua ?
С таким же успехом можно просто подгружать boost- регулярку с файла ( к примеру в ComboBox или Edit)
Lua - это текстовый скрипт, прилагаемый к программе. Его пользователь может взять и сам поменять как надо. Если к boost'у есть возможность приделать то же самое - наверное можно и так, но я просто не знаю, как оно выглядит. Lua - нормальный вменяемый язык, на котором можно написать удобную программу с функциями, потому что не всегда страница распарсивается просто и элементарно при помощи одного регулярного выражения

Когда мне требовалось сливать данные с сайта, то потребовалось залогиниться на сайт, получить адрес требуемой страницы и с неё уже выцеплять данные. В другом случае требовалось скачивать данные с "длинной" страницы, которая состоит из нескольких html-адресов (а не с одного адреса). В этом случае у меня на Lua был написан целый процесс обновления данный с сайта. Из Lua вызывался код по скачиванию страницы, который был написан на Си (ибо там менять ничего не надо).
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 17:38
Я имею ввиду нечто вроде
C++
1
2
boost::regex re( AnsiString(Edit1->Text).c_str() );
// а дальше сам парсинг
И пользователь может поменять регулярку в Edit-те.

Со сложными регулярками наверное будет лучше lua.

А собственно в самой LUA есть регулярные выражения или весь анализ вручную посимвольно?
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2012, 17:44
В Lua есть регулярка. По синтаксису там небольшие отличия от "привычных" регулярок
2
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.02.2013, 02:14
Новая тема тут https://www.cyberforum.ru/cpp-... 77781.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2013, 02:14

Html парсер на QT
Добрый день! Я понимаю, что мой вопрос очень абстрактен. Я хочу реализовать програмку на Qt, которая будет сама лазить по определенному...

Парсер html
Ребят пишу парсер, парсю через регулярки, но есть проблема - не могу составить регулярку на код такого вида: &lt;div...

Парсер HTML на C++
Помогите найти библиотеку для синтаксического анализа HTML на C++ или Си. Желательно, работающую с HTML DOM P.S. Нет, я не пишу браузер,...

Html парсер
Здравствуйте!Есть простой код парсинга тега &lt;title&gt; c сайтов. Вот нашел пример: import org.jsoup.Jsoup; import...

Парсер html на c++
В консольном приложении хочу чтобы для конвертации валют использовались актуальные данные с сайта. Это возможно реализовать? Какие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru