Почему JSoup неправильно анализирует мой HTML-код?

Я пытаюсь проанализировать веб-страницу, но когда я хочу получить фрагмент текста на странице. Jsoup дает мне неправильный документ, когда я вызываю методы Jsoup.parse() и Jsoup.connect().get().

Это часть веб-страницы и моего кода. doc var имеет неверный DOM.

 Document doc1 = Jsoup.parse("<p class=\"texto\"><p>El concurso fotogr&aacute;fico internacional <em>Earth and Sky Photo Contest</em> ya tiene <a href=\"http://www.twanight.org/newTWAN/index.asp\" target=\"_blank\">ganadores</a> en su tercera edici&oacute;n. Bajo el tema &ldquo;La Importancia del cielo oscuro&rdquo;, las fotos galardonadas este a&ntilde;o son aquellas que mejor transmiten la belleza de un cielo estrellado y el problema de la contaminaci&oacute;n lum&iacute;nica. Como recuerdan los organizadores, hoy d&iacute;a el exceso de luz artificial en las ciudades hace que las estrellas desaparezcan del cielo urbano. Esta foto del cometa Lovejoy sobre Australia, de Jia Hao, se hizo con el primer premio en la categor&iacute;a \"Belleza del Cielo Nocturno\".</p></p>");

 String summary = doc1.select("p.texto p").text();

Результат переменной doc1:

 <html>
  <head></head>
  <body>
   <p class="texto"></p>
   <p>El concurso fotogr&aacute;fico internacional <em>Earth and Sky Photo Contest</em> ya tiene <a href="http://www.twanight.org/newTWAN/index.asp" target="_blank">ganadores</a> en su tercera edici&oacute;n. Bajo el tema “La Importancia del cielo oscuro”, las fotos galardonadas este a&ntilde;o son aquellas que mejor transmiten la belleza de un cielo estrellado y el problema de la contaminaci&oacute;n lum&iacute;nica. Como recuerdan los organizadores, hoy d&iacute;a el exceso de luz artificial en las ciudades hace que las estrellas desaparezcan del cielo urbano. Esta foto del cometa Lovejoy sobre Australia, de Jia Hao, se hizo con el primer premio en la categor&iacute;a &quot;Belleza del Cielo Nocturno&quot;.</p>
   <p></p>
  </body>
 </html>

Я сделал что-то не так?


person Beni    schedule 22.05.2012    source источник
comment
Ваш HTML-код недействителен. Для проверки используйте службу проверки, например validator.w3.org.   -  person Rajesh    schedule 22.05.2012


Ответы (1)


Если вы имеете в виду теги ‹html› и ‹body›, это просто Jsoup помещает ваш фрагмент в оболочку надлежащего документа.

Однако ваш начальный XML:

<p class="texto">
    <p>
        El concurso fotogr&aacute;fico internacional <em>Earth and Sky Photo Contest</em> ya tiene <a href="http://www.twanight.org/newTWAN/index.asp" target="_blank">ganadores</a> en su tercera edici&oacute;n. Bajo el tema &ldquo;La Importancia del cielo oscuro&rdquo;, las fotos galardonadas este a&ntilde;o son aquellas que mejor transmiten la belleza de un cielo estrellado y el problema de la contaminaci&oacute;n lum&iacute;nica. Como recuerdan los organizadores, hoy d&iacute;a el exceso de luz artificial en las ciudades hace que las estrellas desaparezcan del cielo urbano. Esta foto del cometa Lovejoy sobre Australia, de Jia Hao, se hizo con el primer premio en la categor&iacute;a "Belleza del Cielo Nocturno".  
    </p>
</p>

содержит вложенные элементы ‹p› — это не допустимый HTML, и JSoup исправит это для вас. Вложенные абзацы подробно объясняются здесь - короче говоря, они автоматически закрываются, в результате чего ваш DOM отличается от того, что вы ожидали. .

Подумайте о преобразовании внешнего ‹p› в ‹span›, и все будет в порядке.

person Jens    schedule 22.05.2012