Мне довелось использовать разные инструменты для парсинга html, но недавно я открыл для себя библиотеку jsoup и остался ей весьма доволен. Впечатляет скорость работы в сочетании с богатством возможностей. Библиотека позвояет строить документ из "не совсем валидного" html, использовать xpath и css селекторы а также прямую навигацию по DOM-дереву, получать данные из элементов DOM в виде html-фрагментов или "очищенного" текста.
Приведу простой пример:
Тут мы создаём документ из url, css-селектором вынимаем из этого документа строки некоторой таблицы и в цикле обходим строки (кроме первой) для того чтобы получить значения первой и второй колонки а затем сложить их к себе в HashMap. Задача, как видим весьма распространённая а решение очень простое.
- class TableParser {
- private HashMap map = new HashMap();
- private final String url = "http://site.com"
- public HtmlParser() {
- try {
- Document doc = Jsoup.connect(url).get();
- Elements rows = doc.select("div#leftCol table.main tr");
- for (int i=1; i<rows.size();i++) {
- Element row = rows.get(i);
- map.put(row.child(0).text().trim(), row.child(1).text());
- }
- } catch (Exception e) {
- e.printStackTrace(System.err);
- }
- }
- public HashMap getMap() {
- return this.map;
- }
- }
Хорошая штука! Только с фильтрами всё запутано :(
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьВот ссылка на документацию по фильтрам (дабы нубы не страдали)
ОтветитьУдалитьhttp://jsoup.org/apidocs/org/jsoup/select/Selector.html
Пожалуйста, подскажите как доставать из html пустые строки? Спасибо
ОтветитьУдалитьСтатья огонь, с её помощью обошел ограничение фейсбука на получение номеров телефонов друзей через Facebook sdk :)
ОтветитьУдалитьДоброго времени суток.
ОтветитьУдалитьПодскажите, пожалуйста, возможно ли с помощью jsoup вытаскивать javascript ссылки?
И если можно, то как?
Спасибо, Дмитрий.