LINUX.ORG.RU

Опробируйте самодельный «ЯП» для выдирания данных из HTML.


0

2

Не совсем «ЯП», больше похоже на regexp, где вместо символов строк оперирует HTML-тегами, считая HTML-документ строкой, где символ - тег. У тега, соответственно, свойства, которые можно тырить в переменные. То есть, как и в regexp, вы описываете шаблон, который должен найтись.

Шаблон переплетён с кодом, который начинает выполняться, как только находятся соответствующие этому коду куски шаблона. В последней части шаблона обычно пишется такой код, выполнением которого подтверждают нахождение всего шаблона. Обычно кодом является присвоение содержимого атрибутов HTML-тегов каким-нибудь переменным.

Описание (англ.): http://ymap.dyndns.org/tagstractor.pdf

Собрать можно из исходников (с пом. CMake): http://ymap.dyndns.org/tagstractor-2011-12-22---00-34-40.tar.bz2

В коде есть ужоснах, но под linux и windows собирается. Появляется несколько консольных утилит: test, htmlparser, ttcodeparser, eparser. Первая объединяет в себе код всех остальных, соответственно все остальные нужны для тестов и вы после сборки можете их прибить.

Использовать так: взять откуда-нибудь html-страничку, написать tt-код, запустить «test» с параметрами <html> <ttcode>.

В каталоге ttcode приводится пара примеров на ttcode. Один из примеров вытаскивает список топиков с лора (со страницы вида www.linux.org.ru/forum/development/).

Обсуждение: peorg@jabber.org

★☆

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

Где-то это уже было.

note173 ★★★★★
()

Ого, не зря я сразу попкорном запасся, ждем продолжения!

buddhist ★★★★★
()

гармошка

wxw ★★★★★
()

Зачинай стартап, и - вперёд, к успеху!

OldFatMan
()

Всё-таки белая горячка. Я знал, я знал.

baverman ★★★
()

Опробируйте
Опробируйте
Опробируйте

Grammar Nazi негодуэ!!!

Правильно - «апробуйте».

anonymous
()

несколько консольных утилит: test

$ whatis test
test (1)             - check file types and compare values
power
()
Ответ на: комментарий от cattail

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

xmikex ★★★★
()

где-то я это уже видел, причём не так давно

q11q11 ★★★★★
()

Сделай это как asm-xml, только с поддержкой кривого HTML, незакрытых/двойных тегов, пробелов src=" урлах " и прочей красоты. И еще бы детектилку кодировок, базу последовательностей можно спарсить с википедии. Тогда я смогу запилить свой гугль.

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

Ну оно и похоже на asm-xml и рассчитанно именно на поддержку кривого HTML, т.к. деревья не строятся, а документ рассматривается как линейная последовательность тегов. Соответственно ему пох, что там не закрыто и т.п.

Есть приниматель решений «utf8» или «не utf8».

(-;

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

Дык ты не похоже сделай, а тоже на асме перепиши. И «приниматель» - это очень мало, надо понять что там еще, особенно если микс из кодировок, бывает и такое. Или битые юникодные символы где-то в начале, а дальше все в utf8. Собственно, кривой юникод парсить - это весело.

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

Я одного не понимаю. Зачем это нужно когда есть perl?

Ты просто не парсил много сайтов или не пробовал ничего вкуснее морковки. Хотя это совсем не отменят абсолютной ненужности сабжа.

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

ну а в чем проблема то? Можно на примере?

Регулярки слишком контекстно зависимы. Их трудно поддерживать. В случае xpath, я опираюсь на структуру (а не на контент) страницы. Это позволяет добиться цели с *намного* меньшими усилиями.

baverman ★★★
()

может уже предлагали но js + e4x, html -> xhtml хотя самодейтельность это хорошо

bga_ ★★★★
()

Да хватит говорить, никакая не гармошка. Мне вот нужно парсить тысячи страниц в минуту, внутри кривой HTML и даже кодировки. Шаблоны тоже могут незначительно меняться. Что, строить деревья, дабы потом через xpath вытаскивать? Вы представляете, что это нереальный оверхед? Регекспами на порядок быстрее, но когда парсим тысячи страниц, то тоже не очень шустро.

Мной написан велосипед на сишке, который пытается парсить теги, считает из них хеши (с учетом регекспов), дабы сравнивать быстрее, заполняет массивчики хешей и если последовательность соответствует шаблону, то начинается заполнение структур. Как это работает я уже сам плохо понимаю, от метакоманд вида «следовать до пробела, а потом игнорировать 5 тегов» взгляд мутнеет, но работает быстрее, нежели первая версия на перле и его регекспах.

Велосипед автора не пробовал, но посмотрю, ибо альтернатив не знаю.

И не надо говорить про красивый суп, который даже кавычки не может отпарсить.

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

Регулярки слишком контекстно зависимы. Их трудно поддерживать. В случае xpath, я опираюсь на структуру (а не на контент) страницы. Это позволяет добиться цели с *намного* меньшими усилиями.

Что говорите? Регекспы контекстно зависимы?) )

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

Регекспы контекстно зависимы

Именно. Порядок атрибутов у тега, форма кавычек. Пробелы можно хавать только через \s+, так как в html могут быть переносы, не забывать стрипать строки, entity. Напарсился я регулярками по самую маковку, уж поверь.

Но это еще пол беды. Самая жопа, когда страница немножко меняется, и из-за привязки к конкретным местам парсинг перестает работать.

В общем, кушайте дальше свою морковку, хе-хе.

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

Regexp к сабжу относится отдалённо, я указал только схожесть с regexp в плане основного принципа работы - матчинг шаблонов. Но в «tt» вы пишете шаблон не для символов текста, а для цепочки тегов с набором атрибутов. При работе с «tt» вам по барабану пробелы, порядок следования атрибутов и др. вещи, которые на себя берёт собственный HTML-парсер (-;

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

Есть приниматель решений

А внутре у него неонка.

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

1. Переносы пробелы и прочее это разве проблемы для того чтобы изобретать другой велосипед. Судя по всему мало вы с регекспами в перле работали) Привязываться на форму написания регекспами вообще плохой тон.

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

Судя по всему мало вы с регекспами в перле работали

Они там какие-то уличные что-ли? Всего лишь легкий сахарок. Кстати, года три назад я тоже утверждал, что регулярками всё просто и легко делается. Просто не понимал, чем хорош xpath. Советую не быть как любители koi8.

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

Википедия: «XPath (XML Path Language) — язык запросов к элементам XML-документа». HTML - не XML, а преобразование некоторых кривых HTML-документов к XHTML / XML не всегда прозрачно.

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

То что у тебя бугурт как у автора сей бесполезной поделки — это давно всем понятно. Сказать то что хотел?

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

Я хотел сказать, что квазисибирский булкогрызественный волокучер превозносится от стохастических гонений пятого порядка, только что это тебе даст? Это и мне-то ничего не даёт...

kiverattes ★☆
() автор топика

Автор, несмотря на то, что предложенный опус в таком виде действительно не нужен, не принимай всё близко к сердцу, это же ЛОР.

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