Parse HTML en Android -- android campo con html campo con parsing camp Relacionados El problema

Parse HTML in Android


83
vote

problema

Español

Estoy tratando de analizar HTML en Android desde una página web, y desde la página web no está bien formada, obtengo SAXException .

¿Hay alguna manera de analizar HTML en Android?

Original en ingles

I am trying to parse HTML in android from a webpage, and since the webpage it not well formed, I get SAXException.

Is there a way to parse HTML in Android?

</div
        
   
   

Lista de respuestas

72
 
vote

Acabo de encontrar este problema. Intenté algunas cosas, pero se establecí en usar jsoup . El frasco es de aproximadamente 132K, lo cual es un poco grande, pero si descarga la fuente y elimina algunos de los métodos que no usará, entonces no es tan grande.
= & gt; Lo bueno de esto es que se manejará mal formado HTML

Aquí hay un buen ejemplo de su sitio.

  File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");  //http://jsoup.org/cookbook/input/load-document-from-url //Document doc = Jsoup.connect("http://example.com/").get();  Element content = doc.getElementById("content"); Elements links = content.getElementsByTag("a"); for (Element link : links) {   String linkHref = link.attr("href");   String linkText = link.text(); }   
 

I just encountered this problem. I tried a few things, but settled on using JSoup. The jar is about 132k, which is a bit big, but if you download the source and take out some of the methods you will not be using, then it is not as big.
=> Good thing about it is that it will handle badly formed HTML

Here's a good example from their site.

File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");  //http://jsoup.org/cookbook/input/load-document-from-url //Document doc = Jsoup.connect("http://example.com/").get();  Element content = doc.getElementById("content"); Elements links = content.getElementsByTag("a"); for (Element link : links) {   String linkHref = link.attr("href");   String linkText = link.text(); } 
</div
 
 
       
       
56
 
vote

¿Ha intentado usar html.fromhtml (source) ? < / p>

Creo que la clase es bastante liberal con respecto a la calidad de la fuente (usa tagsoup internamente, que fue diseñado con la vida real, en mente malos). Sin embargo, no admite todas las etiquetas HTML, pero viene con un manejador que puede implementar para reaccionar en las etiquetas que no entiende.

 

Have you tried using Html.fromHtml(source)?

I think that class is pretty liberal with respect to source quality (it uses TagSoup internally, which was designed with real-life, bad HTML in mind). It doesn't support all HTML tags though, but it does come with a handler you can implement to react on tags it doesn't understand.

</div
 
 
   
   
23
 
vote
  String tmpHtml = "<html>a whole bunch of html stuff</html>"; String htmlTextStr = Html.fromHtml(tmpHtml).toString();   
 
String tmpHtml = "<html>a whole bunch of html stuff</html>"; String htmlTextStr = Html.fromHtml(tmpHtml).toString(); 
</div
 
 
       
       
3
 
vote

Todos sabemos que la programación tiene posibilidades infinitas. Hay números de soluciones disponibles para un solo problema, por lo que creo que todas las soluciones anteriores son perfectas y pueden ser útiles para alguien, pero para mí, este ahorra mi día.

así el código va así

    private void getWebsite() {     new Thread(new Runnable() {       @Override       public void run() {         final StringBuilder builder = new StringBuilder();          try {           Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();           String title = doc.title();           Elements links = doc.select("a[href]");            builder.append(title).append(" ");            for (Element link : links) {             builder.append(" ").append("Link : ").append(link.attr("href"))             .append(" ").append("Text : ").append(link.text());           }         } catch (IOException e) {           builder.append("Error : ").append(e.getMessage()).append(" ");         }          runOnUiThread(new Runnable() {           @Override           public void run() {             result.setText(builder.toString());           }         });       }     }).start();   }   

Solo tiene que llamar a la función anterior en onCreate Method de su MainActivity

Espero que este también sea útil para ustedes.

También lee el blog original en Medio

 

We all know that programming have endless possibilities.There are numbers of solutions available for a single problem so i think all of the above solutions are perfect and may be helpful for someone but for me this one save my day..

So Code goes like this

  private void getWebsite() {     new Thread(new Runnable() {       @Override       public void run() {         final StringBuilder builder = new StringBuilder();          try {           Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();           String title = doc.title();           Elements links = doc.select("a[href]");            builder.append(title).append(" ");            for (Element link : links) {             builder.append(" ").append("Link : ").append(link.attr("href"))             .append(" ").append("Text : ").append(link.text());           }         } catch (IOException e) {           builder.append("Error : ").append(e.getMessage()).append(" ");         }          runOnUiThread(new Runnable() {           @Override           public void run() {             result.setText(builder.toString());           }         });       }     }).start();   } 

You just have to call the above function in onCreate Method of your MainActivity

I hope this one is also helpful for you guys.

Also read the original blog at Medium

</div
 
 
1
 
vote

Tal vez puede usar WebView, pero como puede ver en el DOC WebView no admite JavaScript y otras cosas como widgets de forma predeterminada.

http://developer.android.com/reference/android/webkit /Webview.html

Creo que puede habilitar JavaScript si lo necesita.

 

Maybe you can use WebView, but as you can see in the doc WebView doesn't support javascript and other stuff like widgets by default.

http://developer.android.com/reference/android/webkit/WebView.html

I think that you can enable javascript if you need it.

</div
 
 
   
   

Relacionados problema

11  Pyparsing - carga ABNF?  ( Pyparsing load abnf ) 
¿Puede PYPARSING Lee ABNF de un archivo en lugar de tener que definirlo en términos de objetos de Python? Si no, hay algo que puede hacer similares (cargar ...

49  Regex: para sacar una subcadena entre dos etiquetas en una cadena  ( Regex to pull out a sub string between two tags in a string ) 
Tengo un archivo en el siguiente formato: Datos de datos Datos [Comienzo] Datos que quiero [Final] Datos Me gustaría agarrar el Data I want de entre el ...

68  ¿Cómo analizar un tiempo en un objeto de fecha de la entrada del usuario en JavaScript?  ( How to parse a time into a date object from user input in javascript ) 
Estoy trabajando en un widget de formularios para que los usuarios ingresen una hora del día en una entrada de texto (para una solicitud de calendario). Uso d...

103  ¿Qué es el equivalente C # de NAN o ISNUMERIC?  ( What is the c sharp equivalent of nan or isnumeric ) 
¿Cuál es la forma más eficiente de probar una cadena de entrada si contiene un valor numérico (o, a la inversa, no un número)? Supongo que puedo usar Double....

2  Operaciones en Java Swing  ( Operations on java swing ) 
En mi proyecto, obtendré las coordenadas de algunos puntos de un archivo XML y crearé algunos componentes visuales usando esta información? Estoy planeando da...

83  Parse HTML en Android  ( Parse html in android ) 
Estoy tratando de analizar HTML en Android desde una página web, y desde la página web no está bien formada, obtengo SAXException . ¿Hay alguna manera de a...

2  PHP o C # Script para analizar los valores de la tabla CSV para completar la tabla uno a muchos  ( Php or c sharp script to parse csv table values to fill in one to many table ) 
Estoy buscando un ejemplo de cómo separar los datos delimitados por comas en un campo de una tabla y completar una segunda tabla con esos elementos individual...

42  ¿Cuáles son las desventajas del marco del generador de analizador de espíritu de Boost.org?  ( What are the disadvantages of the spirit parser generator framework from boost o ) 
En varias preguntas, he visto recomendaciones para la > Espíritu Parser-Generator Framework desde boost.org , pero luego en los comentarios hay gruñido de p...

0  Cómo leer las entradas de archivos de configuración de un archivo INI  ( How to read config file entries from an ini file ) 
No puedo usar las funciones Q3: A1 B1 A2 B2 A3 B3 9 porque estoy usando una versión anterior del SDK de la plataforma Windows CE que no tiene esos. No tiene...

7  Método de no bloqueo para analizar (transmisión) XML en Python  ( Non blocking method for parsing streaming xml in python ) 
Tengo un documento XML que viene en un zócalo que necesito analizar y reaccionar en la mosca (es decir, analizando un árbol parcial). Lo que me gustaría es un...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos