У меня стоит задача парсить html странички определенным образом. Возможно ли использовать для этого HtmlLayout? От него нужен только разбор странички на элементы, никакого рендеринга, ничего больше. Очень желательно, чтобы он мог работать не используя gui вообще. Не очень понятно, может ли он такое и, если да, то предназначен ли он вообще для работы с real-life страничками, которые не полностью соответствуют стандарту.
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте,
А>У меня стоит задача парсить html странички определенным образом. Возможно ли использовать для этого HtmlLayout? От него нужен только разбор странички на элементы, никакого рендеринга, ничего больше. Очень желательно, чтобы он мог работать не используя gui вообще. Не очень понятно, может ли он такое и, если да, то предназначен ли он вообще для работы с real-life страничками, которые не полностью соответствуют стандарту.
А>спасибо
Я такое делал при помощи IHTMLDocument. Т.е. создавал такой объект через CoCreateInstance, делал ему open("about:blank"), write текста страницы (как SafeArray), потом close. После этого уже можно бегать по иерархии элементов на странице.
Здравствуйте, Аноним, Вы писали:
А>У меня стоит задача парсить html странички определенным образом. Возможно ли использовать для этого HtmlLayout? От него нужен только разбор странички на элементы, никакого рендеринга, ничего больше. Очень желательно, чтобы он мог работать не используя gui вообще. Не очень понятно, может ли он такое и, если да, то предназначен ли он вообще для работы с real-life страничками, которые не полностью соответствуют стандарту.
Лучше взять HTML Tidy — она как раз предназначена для real-life...
Здравствуйте, Аноним, Вы писали:
А>Здраствуйте,
А>У меня стоит задача парсить html странички определенным образом. Возможно ли использовать для этого HtmlLayout? От него нужен только разбор странички на элементы, никакого рендеринга, ничего больше. Очень желательно, чтобы он мог работать не используя gui вообще. Не очень понятно, может ли он такое и, если да, то предназначен ли он вообще для работы с real-life страничками, которые не полностью соответствуют стандарту.
В HTMLayout есть HTMLite (htmlite.h). Это windowless сущность не требующая создания окна.
Т.е. для загрузить html и взять скажем текст второго list item из <ul id="list"> можно так:
using namespace htmlayout;
HTMLite* phl = new HTMLite();
phl->load(htmlBuf,numBytes,baseUrl);
dom::element root = phl->getRootElement();
dom::element something = root.find_first("ul#list > li:nth-child(2)");
std::wstring text = something.text();
delete phl;
Это если надо просто отпарсить html. Если же требуется еще и получать какие-то ресурсы (типа images, style sheets и т.д.)
то нужно будет перекрывать HTMLite::handleSetTimer() метод чтобы поддержать асинхронный режим.
Re[2]: Получить DOM при помощи HtmlLayout
От:
Аноним
Дата:
08.09.10 07:30
Оценка:
Здравствуйте, jahr, Вы писали:
J>Здравствуйте, Аноним, Вы писали:
А>>Здраствуйте,
J>Я такое делал при помощи IHTMLDocument. Т.е. создавал такой объект через CoCreateInstance, делал ему open("about:blank"), write текста страницы (как SafeArray), потом close. После этого уже можно бегать по иерархии элементов на странице.
Насколько я понимаю, этот способ использует в конечном итоге internet explorer. Сейчас уже есть такое решение и заказчика оно не устраивает из-за низкой скорости работы и общей глючности — они пытаются запускать этот разбор в несколько потоков, всё тормозит, зависает и т.д. Хочется чего-то попроще. Я в курсе про движки типа gecko и webkit, но первый, как я понял, надо перед использованием регистрировать в системе и всё такое, что не очень желательно, а второй собрать под винду — много сил положить надо.
Re[2]: Получить DOM при помощи HtmlLayout
От:
Аноним
Дата:
08.09.10 07:38
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Аноним, Вы писали:
К>Лучше взять HTML Tidy — она как раз предназначена для real-life...
Почему-то раньше думал, что она предназначена только для лечения и переформатирования html-лек с ошибками. Посмотрел документацию, похоже, под мои нужды подойдет. Попробую, спасибо.
Re[2]: Получить DOM при помощи HtmlLayout
От:
Аноним
Дата:
08.09.10 07:51
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Аноним, Вы писали:
А>>Здраствуйте,
CS>В HTMLayout есть HTMLite (htmlite.h). Это windowless сущность не требующая создания окна.
Спасибо огромное. Тоже попробую. Из документации мне почему-то показалось, что ей для работы обязательно нужен HDC.
Здравствуйте, Аноним, Вы писали:
А>Почему-то раньше думал, что она предназначена только для лечения и переформатирования html-лек с ошибками. Посмотрел документацию, похоже, под мои нужды подойдет. Попробую, спасибо.
Нынешний интернет состоит из html-лек с ошибками чуть более чем полностью. Так что подойдёт.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, Аноним, Вы писали:
А>>>Здраствуйте,
CS>>В HTMLayout есть HTMLite (htmlite.h). Это windowless сущность не требующая создания окна.
А>Спасибо огромное. Тоже попробую. Из документации мне почему-то показалось, что ей для работы обязательно нужен HDC.
HDC нужен если ты собираешься рисовать полученный HTML. Если просто для DOM то он нужен.