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

Парсер HTML

01.01.2011, 09:47. Показов 21556. Ответов 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
8484 / 6151 / 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2012, 12:00
Цитата Сообщение от Egeni Посмотреть сообщение
Evg, у тебя есть работающие примеры таких программ парсеров?
Есть, только выдранное из контекста оно тебе вряд ли чем-то поможет
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2012, 13:26
Цитата Сообщение от Egeni Посмотреть сообщение
Avazart, Vlad_IT, если можно с примерами пожалуйста...
Иногда полезно читать те ссылки, которые тебе дают: https://www.cyberforum.ru/cpp-... ost1651285
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 16:23
Evg, А чем собственно вызвана необходимость использовать LUA ?
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2012, 16:40
Цитата Сообщение от Avazart Посмотреть сообщение
Evg, А чем собственно вызвана необходимость использовать LUA ?
В посте #25 всё написал
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.10.2012, 16:44
Цитата Сообщение от Evg Посмотреть сообщение
Формат страницы со временем может немного меняться и от тебя это никак не зависит (если я правильно понимаю). А потому время от времени может понадобиться вносить изменения в парсер. На одной чаше весов программа, для которой при изменении в парсере требуется перекомпиляция. Другими словами, если ты не хочешь никому отдавать исходник, то пользователи твоей программы уже ничего не смогут сделать, если что-то на сайте поменялось. На другой чаше весов программа, для которой НЕ требуется перекомпиляция, а требуется исправить скрипт на lua, который идёт в комплекте с программой. На крайний случай пользователь сам сможет поправить парсер, а потому для пользователя такой вариант выглядит более привлекательным
А как тут поможет lua ?
С таким же успехом можно просто подгружать boost- регулярку с файла ( к примеру в ComboBox или Edit)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2012, 17:33
Цитата Сообщение от Avazart Посмотреть сообщение
А как тут поможет lua ?
С таким же успехом можно просто подгружать boost- регулярку с файла ( к примеру в ComboBox или Edit)
Lua - это текстовый скрипт, прилагаемый к программе. Его пользователь может взять и сам поменять как надо. Если к boost'у есть возможность приделать то же самое - наверное можно и так, но я просто не знаю, как оно выглядит. Lua - нормальный вменяемый язык, на котором можно написать удобную программу с функциями, потому что не всегда страница распарсивается просто и элементарно при помощи одного регулярного выражения

Когда мне требовалось сливать данные с сайта, то потребовалось залогиниться на сайт, получить адрес требуемой страницы и с неё уже выцеплять данные. В другом случае требовалось скачивать данные с "длинной" страницы, которая состоит из нескольких html-адресов (а не с одного адреса). В этом случае у меня на Lua был написан целый процесс обновления данный с сайта. Из Lua вызывался код по скачиванию страницы, который был написан на Си (ибо там менять ничего не надо).
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2012, 17:44
В Lua есть регулярка. По синтаксису там небольшие отличия от "привычных" регулярок
2
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru