Nano Hash - криптовалюты, майнинг, программирование

Парсер Jsoup не работает должным образом только для определенного URL-адреса

Я использую Jsoup для загрузки содержимого страницы, а затем для его анализа.

public static void main(String[] args) throws IOException {
        Document document = Jsoup.connect("http://www.toysrus.ch/product/index.jsp?productId=89689681").get();
        final Elements elements = document.select("dt:contains(" + "EAN/ISBN:" + ")");
        System.out.println(elements.size());
    }

Проблема: если вы просматриваете источник содержимого страницы, существует тег <dt>, который содержит EAN/ISBN: текст, но если вы запустите приведенный выше код, он выдаст вам 0 на выходе, а мне он должен дать 1 . Я уже проверил html с помощью document.html(), кажется, html-теги есть, но тег, который я хотел, заменен символами, такими как &lt;dt&gt;, вместо этого должен быть <dt>. Тот же код работает для других URL-адресов продуктов с того же сайта.

Я уже работал с Jsoup и разработал много парсеров, но я не понимаю, почему очень простой код не работает. Это странно! Это ошибка Jsoup? Кто-нибудь может мне помочь?

04.05.2017

Ответы:


1

При использовании connect() или parse() jsoup по умолчанию ожидает допустимый HTML и автоматически форматирует ввод, если это необходимо. Вместо этого вы можете попробовать парсер xml.

    public static void main(String [] args) throws IOException { 
        String url = "http://www.toysrus.ch/product/index.jsp?productId=89689681";
        Document document = Jsoup.parse(new URL(url).openStream(), "UTF-8", "", Parser.xmlParser());
        //final Elements elements = document.select("dt:contains(" + "EAN/ISBN:" + ")");
        // the same as above but more readable:
        final Elements elements = document.getElementsMatchingOwnText("EAN/ISBN");            
        System.out.println(elements.size());
    }
04.05.2017
  • есть ли недостатки использования xmlParser ? 04.05.2017
  • Используя connect().get() или parse(), вы неявно указываете jsoup использовать его htmlParser(). Этот синтаксический анализатор обрабатывает ввод как HTML5 и обеспечивает создание нормализованного документа на основе знания семантики входящих тегов. При синтаксическом анализе HTML5 будут применяться правила синтаксического анализа (например, существует белый список тегов; незакрытые теги будут автоматически закрыты; ‹ссылка› bla‹/ссылка› будет преобразована в ‹ссылка /› bla и т. д.) 04.05.2017
  • xmlParser() не предполагает знания входящих тегов и не обрабатывает их как HTML, а создает простое дерево непосредственно из ввода. Использование этого синтаксического анализатора позволяет анализировать ввод как есть, не применяя правила синтаксического анализа HTML5. Я не вижу никаких недостатков. Если есть некоторые, я не могу сказать. 04.05.2017
  • Я думаю, что connect также должен работать с Jsoup.connect(url).parser(Parser.xmlParser()) 04.05.2017

  • 2

    Вам нужно заключить в одинарные кавычки значение «EAN/ISBN:»; в противном случае он будет интерпретироваться как переменная.

    Кроме того, нет необходимости разбивать строку и соединять части вместе. Просто поместите все это в одну строку.

    04.05.2017
  • Пожалуйста, попробуйте сами, а затем ответьте, любые ваши предложения вообще не актуальны. Спасибо за ваше время. 04.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..