LINUX.ORG.RU

Быстрый парсинг HTML

 


0

3

Представьте такую парсилку:

1. Сначала разобрать HTML-документ на линейную последовательность тегов. Линейную, карл. Никаких отношений между тегами. Парсер не знает про то, что теги вложены друг в друга, имеют закрывающих собратьев и другое. Тег - имя + набор атрибутов. Иерархии нет. Закрывающий тег - тупо отдельное имя в той же плоской последовательности. Есть тег «TD», а есть тег «/TD», у них просто вот такие имена и парсеру неважно почему они такие. Какой-нибудь простой текст будет в итоге превращён в объект-тег типа «TEXT» с атрибутом value равный самому тексту, допустим.

2. Рассмотреть всю эту последовательность как строку, где вместо char объект «тег» (с атрибутами).

3. Сделать как-бы regexp-машинку, но не совсем regexp: она оперирует не символами текста (char), а этими самыми объектами-тегами, линейно следующими, как обычный текст.

В таком духе:

// заматчить любую пару тегов <TD> + </TD> с любыми тегами между ними.
// повторю: здесь всем пофиг на имена тегов. Никаких отношений между TD и /TD парсер HTML и данная regexp-машина не знают. Для неё это просто 2 каки-то там тега.
TD, * *, /TD


// то же самое, но только <TD> имеющий атрибут "hello" равный 123
TD hello=="123", * *, /TD

// можно замутить встроенный язык с переменными
// При встрече тега HTML создать i = 0
// Пропустить сколько угодно каких угодно тегов
// заматчить много последовательностей <TD> ... </TD>
// При матчинге очередного TD инкрементнуть переменную
// В итоге мы посчитаем число пар <TD>...</TD> заодно.

HTML $i=0, * *, (TD $i++, * *, /TD)*

Не будет ли такое быстрее, чем построение в памяти всего DOM-дерева и исполнение на этом дереве XPath-запросов?



Последнее исправление: igloev (всего исправлений: 4)

Ответ на: комментарий от DELIRIUM

Что это? Это едят, или куда это запихивают?

Ещё один пятизвёздочный авторитет, который зашёл в тред отметиться. Я за бан тебя.

igloev
() автор топика
Ответ на: комментарий от Twissel

Обнимите покрепче друг друга, братушки))

За что тебе, флудерасту, 5 звёзд выдали? Бухал с админом?

igloev
() автор топика
Ответ на: комментарий от anonymous

Пусть так. А формат результата парсинга каков?

Пока что это встраиваемая либа. Она отдаёт набор переменных, которые ты насоздавал описанным встроенным языком. Если никаких не создавал - ничего не отдаст (см. пример с переменной $i и тегом HTML).

igloev
() автор топика
Ответ на: комментарий от igloev

3. Сделать regexp-машинку, ...

Что за народ. В треде нет речb про регекспы вообще. Екарны екибастуз, полстраны читает не глазами.

ОК

Он рад любому тегу в любой момент последовательности.

И привет, это был не тег, парсеру надо было знать где он в структуре дерева в тот момент и как читать этот тег/текст/или еще что.

Kokonavtuz
()
Ответ на: комментарий от Kokonavtuz

И привет, это был не тег, парсеру надо было знать где он в структуре дерева

Я вас не понял. Или вы меня. Нет дерева.

igloev
() автор топика

Владимир

Над алгоритмом вы работаете.
Просьба привести пример страницы html и результат разбора.

anonymous
()
Ответ на: комментарий от anonymous

Просьба привести пример страницы html и результат разбора.

Хорошо, сделаем.

igloev
() автор топика
Ответ на: комментарий от Kokonavtuz

Классический и очень точный ответ

You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML. Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions. Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. HTML-plus-regexp will liquify the n​erves of the sentient whilst you observe, your psyche withering in the onslaught of horror. Rege̿̔̉x-based HTML parsers are the cancer that is killing StackOverflow it is too late it is too late we cannot be saved the trangession of a chi͡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes using regex as a tool to process HTML establishes a breach between this world and the dread realm of c͒ͪo͛ͫrrupt entities (like SGML entities, but more corrupt) a mere glimpse of the world of reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he com̡e̶s, ̕h̵i​s un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, HTML tags lea͠ki̧n͘g fr̶ǫm ̡yo​͟ur eye͢s̸ ̛l̕ik͏e liq​uid pain, the song of re̸gular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL I​S LOST the pon̷y he comes he c̶̮omes he comes the ich​or permeates all MY FACE MY FACE ᵒh god no NO NOO̼O​O NΘ stop the an​*̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e n​ot rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ

Shaman007 ★★★★★
()
Ответ на: комментарий от etwrq

И это тоже абсолютно неверно, это ложь. Возможно, кому-то пора пойти книжки почитать, а не выдумывать «поля xml»?

anonymous
()
Ответ на: комментарий от etwrq

Во-первых, вы путаете SGML и XML. SGML является прародителем обоих языков.

Во-вторых, если бы HTML был подмножеством XML, то зачем надо было изобретать отдельную сериализацию в виде XHTML?

Ну и в третьих, HTML5 уже даже явно не основан на SGML.

As HTML5 is no longer formally based upon SGML, the DOCTYPE no longer serves this purpose, and thus no longer needs to refer to a DTD.

anonymous
()
Ответ на: комментарий от igloev

Написано же «любую пару тегов <TD> + </TD> с любыми тегами между ними». Для последовательности из 4 тегов есть 3 совпадающие подпоследовательности. Также как для строки «<TD id=1></TD><TD id=2></TD>» на регулярку «<TD.*</TD>» будут совпадающими

<TD id=1></TD><TD id=2></TD>
<TD id=1></TD>
<TD id=2></TD>

Есть тег TD и есть тег /TD, которые никак не связаны никакой логикой с точки зрения разбора.

Тогда для странички он в общем случае выдаст всё с первой ячейки первой таблицы по последнюю ячейку последней таблицы.

HTML $i=0, * *, (TD $i++, * *, /TD)*

Здесь i будет равен 1, если есть хоть одна ячейка, иначе 0. Так как TD $i++, * *, /TD встанет в соответствие всему куску с первого TD по последний /TD.

Если ещё точнее, то всегда будет 0, так как * * = «любые тэги», а ()* позволяет в том числе 0 групп. Также как

>>> re.findall(r'h(.*)x*', 'haaxx')
['aaxx']
>>> re.findall(r'h(a*)x*', 'haaxx')
['aa']

monk ★★★★★
()

Владимир

Исходный текст текущего алгоритма можете опубликовать /к примеру на github/?

anonymous
()

TD, * *, /TD
TD hello==«123», * *, /TD

Как бы можно сделать компилятор из этого в регекспы, и чем получается оно отличается от тупо парсинга html регекспами? Только для каких-то нишевых задач, на произвольном html такой парсер не сможет решать возникающие задачи.

HTML $i=0, * *, (TD $i++, * *, /TD)*

Это, наверное, в регэксп не скомпилишь. Но зачем городить огород, если, как уже сказали, задачу можно решить SAX-парсером, который таки будет быстрее DOM-парсера.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от monk

Уточнение: всегда срабатываем на быстрее всего встретившийся.

igloev
() автор топика
Ответ на: комментарий от igloev

Ну ты спросил, не будет ли такой подход быстрее DOM парсера

goingUp ★★★★★
()

Модер, выпили отсюда все эти унылые разговоры про ЛГБТ, негров и т.п. пожалуйста. Зачем они засрали тред?

igloev
() автор топика
Ответ на: комментарий от igloev

все эти унылые разговоры про ЛГБТ, негров и т.п.

Да только самое веселье пошло, зойчем ?!

Разговоры про негров и пр. намного прикольнее, чем тупняк из ОП. DELIRIUM, я правильно грю?!

Twissel ★★★★★
()
Ответ на: комментарий от Twissel

Да это ваще шедевр троллинга. I undarstand that you are afraid of ArmInAss, but this Is just a first step on a long way of becoming a gay-nigger!

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от i-rinat

А китайцы делают этот язык ещё и синтаксически-сободным. У них до сих пор на алиэкспрессе не все пересекающиеся теги починили (хотя и лучше стало, чем лет пять назад).

gremlin_the_red ★★★★★
()

Предлагаю выкинуть HTML/XHTML и переходить на Pug. Выкинуть JavaScript и встроить Dart.

menangen ★★★★★
()
Ответ на: комментарий от Twissel

linuxpc, я нашел твоего единокровного брата, это igloev.

По стилю (по отсутствию стиля) в использовании блока {code} они точно единокровные.

anonymous
()
Ответ на: комментарий от etwrq

Вопрос отношений XML и HTML легко выясняется методом:

google://SGML

Pinkbyte ★★★★★
()
Ответ на: комментарий от igloev

Нет.

У тебя в заглавном же сообщении написано:

Сделать как-бы regexp-машинку, но не совсем regexp: она оперирует не символами текста (char), а этими самыми объектами-тегами, линейно следующими, как обычный текст.

Если это ещё не очевидно, то «regexp-машина», которая «оперирует не символами текста (char), а этими самыми объектами-тегами» это всё ещё конечный автомат. Просто алфавит другой. Она всё ещё эквивалентна конечному автомату.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

то всё ещё конечный автомат. Просто алфавит другой. Она всё ещё эквивалентна конечному автомату.

Да.

igloev
() автор топика
Ответ на: Классический и очень точный ответ от Shaman007

.̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̩̩̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̩̩̩̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̩̩̩̩̩̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̥̥̥̩̩̩̩̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̩̩̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̩̩̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̩̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̩̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̩̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̥̩̥̥̥̥̥̥̥̥̥̥̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̩̩̩̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥.̥̥̥̥̥̥̥̥̥̥̥̩̩̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥














i-rinat ★★★★★
()
Ответ на: комментарий от igloev

Владимир

Скорее всего API для поиска данных в HTML выглядит так:[br]

  • в одной из переменной хранится список имен вложенных tags /where/;
  • во второй имя /имена/ tag, содержащие данные;
  • далее вы в цикле ищете начало требуемых данных и производите отбор данных из заданных tag.

Что-то в этом есть.

anonymous
()
Ответ на: комментарий от anonymous

Владимир

Для некоторых HTML такой алгоритм будет работать правильно.
Собственно вы просите идеи его совершенствования.
Пока ни чего «дельного» сказать не могу.

anonymous
()
Ответ на: комментарий от anonymous

Владимир

Экспромтом /то ли шутка, то ли что-то дельное сам не знаю/.
Можно попробовать способ похожий на «из огня да в полымя».
DOM - объект, содержащий forest и grove.

Так вот разработать алгоритм создания документов для https://ru.wikipedia.org/wiki/MongoDB на основании HTML страниц.
А далее выполняем запросы к документам MongoDB.

anonymous
()

libhubbub (из netsurf) быстро и достаточно точно парсит html, с возможностью неразмещения всего дерева в памяти.

Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

Владимир

Посмотрел libhubbub\src\treebuilder\internal.h - 2008 год!
Доработать эту библиотеку конечно можно ...

typedef enum
{
/* Special */
        ADDRESS, AREA, ARTICLE, ASIDE, BASE, BASEFONT, BGSOUND, BLOCKQUOTE,
        BODY, BR, CENTER, COL, COLGROUP, COMMAND, DATAGRID, DD, DETAILS,
        DIALOG, DIR, DIV, DL, DT, EMBED, FIELDSET, FIGURE, FOOTER, FORM, FRAME,
        FRAMESET, H1, H2, H3, H4, H5, H6, HEAD, HEADER, HR, IFRAME, IMAGE, IMG,
        INPUT, ISINDEX, LI, LINK, LISTING, MENU, META, NAV, NOEMBED, NOFRAMES, 
        NOSCRIPT, OL, OPTGROUP, OPTION, P, PARAM, PLAINTEXT, PRE, SCRIPT, 
        SECTION, SELECT, SPACER, STYLE, TBODY, TEXTAREA, TFOOT, THEAD, TITLE, 
        TR, UL, WBR,
/* Scoping */
        APPLET, BUTTON, CAPTION, HTML, MARQUEE, OBJECT, TABLE, TD, TH,
/* Formatting */
        A, B, BIG, CODE, EM, FONT, I, NOBR, S, SMALL, STRIKE, STRONG, TT, U,
/* Phrasing */
        /**< \todo Enumerate phrasing elements */
        LABEL, OUTPUT, RP, RT, RUBY, SPAN, SUB, SUP, VAR, XMP,
/* MathML */
        MATH, MGLYPH, MALIGNMARK, MI, MO, MN, MS, MTEXT, ANNOTATION_XML,
/* SVG */
        SVG, FOREIGNOBJECT, /* foreignobject is scoping, but only in SVG ns */
        DESC,
        UNKNOWN
} element_type;

В любом случае вы подали не плохую мысль - «Какие имеются библиотеки для парсинга HTML?»

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.