2015-06-14 2 views
0

Я хотел бы выполнить некоторые XQuery команды с помощью Basex над источником HTML, который может быть полон <script>, <style> узлов, которые должны быть удалены, а также незакрытые тэги (<br>, <img>), которые должны быть пара. (например, грязный источник this page)Чистые и конвертировать HTML в XML для Basex

«Converting HTML to XML» предлагает использовать Tidy, но у него нет графического интерфейса и не работает корректно на моем источнике (он ничего не выводит), и я сомневаюсь, что он удаляет скрипты и другие ненужные теги. Между прочим, он очень старый.

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

+0

На близких избирателей: Я не вижу, как этот вопрос ищет рекомендации продукта и не требует какого-либо кода требует, чтобы воспроизвести проблему. –

ответ

1

BaseX has integration for TagSoup, который преобразует HTML в хорошо сформированный XHTML.

Большинство дистрибутивов BaseX уже связывают TagSoup, если вы установили BaseX из репозитория Linux, возможно, вам придется добавить его вручную (например, на Debian и Ubuntu это называется libtagsoup-java). Более подробная информация о различных вариантах установки приведена в документации, приведенной выше.

Затем, либо установить TagSoup парсер по умолчанию с помощью команды

SET PARSER html 

или в прологе XQuery с использованием

declare option db:parser "html"; 

Затем просто получить документ, который вы хотите. В качестве примера для сайта Amazon вы связаны между собой:

declare option db:parser "html"; 
doc('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera') 

Это должно работать, но не делает. Я запрашиваю основных разработчиков по той причине, что это не так (кажется, из-за некоторого перенаправления HTTP), и будет обновлять ответ, когда проблема будет решена (или я понимаю, почему это не работает). Обходной путь до тех пор, чтобы получить документ в виде текста и разобрать его как HTML:

html:parse(fetch:text('http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=camera') 
+0

Я думаю, проблема связана с тем, что выборка заблокирована Amazon: $ curl -I 'http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=camera' - return -> HTTP/1.1 405 Метод не разрешен; возможно, он будет работать с правильным User-Agent –

+0

Я получаю достоверные результаты с помощью 'curl -L'. Возможно, они заблокировали вас за чрезмерные запросы. Может быть, вам стоит подумать об использовании своего API, так или иначе - это всегда должно быть предпочтительнее, начиная с сайта. –

+0

Большое спасибо! Я собираюсь установить его для baseX в Windows – Ahmad