Question

I'm trying to parse a web page, but when I want to get a piece of text in the page. Jsoup get me a wrong Document when I call Jsoup.parse() and Jsoup.connect().get() methods.

This is a piece of the web page and my code. The doc var has a wrong 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();

The doc1 variable result is:

 <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>

Did I do something wrong?

Was it helpful?

Solution

If you are referring the <html> and <body> tags that's just Jsoup wrapping your fragment inside the shell of a proper document.

Your starting XML however:

<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>

contains nested <p> elements - that's not valid HTML & JSoup will fix it for you. Nesting paragraphs is explained in detail here - in short - they are auto-closed, causing your DOM to differ from what you expected.

Consider converting the outer <p> into a <span> and you should be fine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top