LINUX.ORG.RU

Парсинг кривого html из bash

 ,


0

1

Есть html страница из которой нужно выдергуть данные вот примерно такого плана:


<td id="TableInfo12345" class="col123">Текст что нужно получить из таблицы</td>

Пытаюсь получить данные используя hxselect из пакета html-xml-utils

hxselect -c 'td[id="TableInfo12345"]' < file.html

Постоянно вываливаются ошибки, что тег такой-то не закрыт, не понятно откуда взялся другой тег. Ошибка на ошибке и ошибкой погоняет т.к. пасал сайт студент на коленке. Если использовать нормальную страницу где все поуму то ошибок нет. Вопрос: как правильно распарсивать из bash страницу html если ее сделали рукожопы?

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

Что за пост? Мне прощается, наверное :) Я раньше ЛОР только читал по технической части и не подробно следил.

P.S. Я прочитал, что ссылка на stackoverflow. Так понял её уже здесь публиковали? Это связано с парсингом? В чем эпичность?

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

Да какое там противодействие, если сама ТС говорит, что у них этот парсер на баше еще при динозаврах писали и он с тех пор работает.

Видимо они удирают инфу с какого-то барахла которое не меняется в принципе, возможно это вообще какой-то внутренний ресурс который умеет выводить инфу в вебе, но не имеет никаких других простых способов обмена ею с другими участниками, вообще нет смысла гадать, пусть тс придет и расскажет что они и откуда забирают в общих словах.

Сам не первый раз с такой задачей сталкиваюсь. И не первый раз слышу: мы отдельное API писать не будем (по разным причинам) - копируете данные сами.

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

Из недавнего (ну, как недавнего, года пол назад) делал многопоточный парсер на Qt5 (все легально, сами добро дали). Протестировал, все норм. Запустил данные качать и ушел. Только через несколько часов заметил, что «уронил» сайт (причем сайт немаленький), и никакой-то фаервол сработал, а сайт тупо заDDoSил. Ни один админ не пошевелился. И такого не просто много, а дофига.

Нормальные байки, но не вижу точек соприкосновения с самой проблемой выполнения дурной работы вместо того, чтобы делать ИС совместно лучше, а не продолжать писать эти убогие решения которые разваливаются при любых правках.

Какая там борьба, тем более, если сайт парсить раз в час, например. Этого в жизни никто не заметит в 99,(9)% случаев.

в сообщении на которое ты отвечаешь так и написано, зачем ты повторяешь то, что я уже написал?

Я не сталкивался, чтобы специально писали невалидный жуткий html в целях защиты.

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

Ты просто высосал проблему из пальца, с проблемами которые, как минимум, в случае ТС скорее всего никогда не наступят. Но признать этого не хочешь.

Проблему из пальца высасываешь ты, а я лишь сказал чем чревато это тупое решение парсить разметку сайта, и что это тупая работа и лучше от такой работы держаться подальше если есть возможность. Причины уже три раза описал.

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

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

Нормальные байки

Это не байка. А магазин на bitrix c большой посещаемостью и объемом товара. Но при этом совершенно некомпетентными администраторами. Сталкиваюсь с таким не в первый раз.

я не вижу смысла особо дальше переливать из пустого в порожнее

Ок. Основная причина таких решений в том, что одни не хотят или не могут дать/сделать API, а другим это нужно (и приходится либо работать в ручном режиме, либо писать парсеры). И если выбирать между: написать парсер и даже править в нем код каждый день; и нанять 5-10 человек которые тоже самое будут копировать руками целый день. Выбор с сторону парсера очевиден. Ты рассуждаешь так как хочется чтобы было, а не так как есть зачастую.

Stack77
()
Последнее исправление: Stack77 (всего исправлений: 2)
Ответ на: комментарий от Stack77

Основная причина таких решений в том, что одни не хотят или не могут дать/сделать API, а другим это нужно (и приходится либо работать в ручном режиме, либо писать парсеры).

Все верно, API небыло и не будет. Парсер приходится писать самостоятельно. Несколько постов выше пример кусок кода на питоне, он работает. Проблема в принципе решена. Если кто-то будет решать подобную проблема знайте: bash - плохо подходит для парсинга сайтов если сайт написан криво. Python и модуль BeautifulSoup хорошо могут выдергивать данные, даже если сайт кривой где закрытие и открытие тегов происходит и спользование функции random.

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