java - programacion - ¿Cómo "escanear" un sitio web(o página) para obtener información, y ponerlo en mi programa?
manual de programacion android pdf (10)
Bueno, estoy tratando de averiguar cómo extraer información de una página web y ponerla en mi programa (en Java).
Por ejemplo, si sé la página exacta de la que quiero información, en aras de la simplicidad, una página de artículo de Best Buy, ¿cómo obtendré la información adecuada que necesito de esa página? Al igual que el título, el precio, la descripción?
¿Cómo se llamaría este proceso? No tengo ni idea de comenzar siquiera a investigar esto.
Editar: Bien, estoy ejecutando una prueba para el JSoup (el publicado por BalusC), pero sigo recibiendo este error:
Exception in thread "main" java.lang.NoSuchMethodError: java.util.LinkedList.peekFirst()Ljava/lang/Object;
at org.jsoup.parser.TokenQueue.consumeWord(TokenQueue.java:209)
at org.jsoup.parser.Parser.parseStartTag(Parser.java:117)
at org.jsoup.parser.Parser.parse(Parser.java:76)
at org.jsoup.parser.Parser.parse(Parser.java:51)
at org.jsoup.Jsoup.parse(Jsoup.java:28)
at org.jsoup.Jsoup.parse(Jsoup.java:56)
at test.main(test.java:12)
Tengo Apache Commons
El proceso en sí mismo normalmente se llama "raspado". Puede usar un analizador como TagSoup para procesar la página una vez que la haya obtenido.
Es probable que desee ver el código HTML para ver si puede encontrar cadenas que son únicas y cercanas a su texto, luego puede usar línea / char-offsets para obtener los datos.
Podría ser incómodo en Java, si no hay clases XML similares a las que se encuentran en System.XML.Linq
en C #.
Esto se conoce como raspado de pantalla, wikipedia tiene este artículo sobre el raspado web más específico. Puede ser un desafío importante porque hay un HTML feo, defectuoso, roto, si no fuera por el navegador, así que buena suerte.
La solución JSoup es genial, pero si necesita extraer algo realmente simple, puede ser más fácil usar regex o String.indexOf
Como otros ya han mencionado, el proceso se llama raspado
Mira en la biblioteca cURL. Nunca lo he usado en Java, pero estoy seguro de que debe haber enlaces para ello. Básicamente, lo que harás es enviar una solicitud de cURL a la página que quieras ''rascar''. La solicitud devolverá una cadena con el código fuente a la página. A partir de ahí, usará regex para analizar los datos que desee del código fuente. Por lo general, así es como lo harás.
Puede usar un analizador html (muchos enlaces útiles aquí: java html parser ).
El proceso se llama ''contenido de sitio web atrapante''. Busque ''obtener contenido del sitio web java'' para mayor inversión.
También jARVEST probar jARVEST .
Se basa en un JRuby DSL sobre un motor puramente Java para transformar sitios web de raspado de araña.
Ejemplo :
Encuentre todos los enlaces dentro de una página web ( wget
y xpath
son construcciones del lenguaje jARVEST):
wget | xpath(''//a/@href'')
Dentro de un programa Java:
Jarvest jarvest = new Jarvest();
String[] results = jarvest.exec(
"wget | xpath(''//a/@href'')", //robot!
"http://www.google.com" //inputs
);
for (String s : results){
System.out.println(s);
}
Use un analizador HTML como Jsoup . Esto tiene mi preferencia sobre los otros analizadores HTML disponibles en Java, ya que supports jQuery como selectores de CSS . Además, su clase que representa una lista de nodos, Elements
, implementa Iterable
para que pueda iterar sobre ella en un bucle NodeList
mejorado (por lo que no es necesario molestarse con las clases de Node
detallado y NodeList
en el analizador Java DOM promedio).
Aquí hay un ejemplo básico de inicio de sesión (basta con poner el último archivo JAR de Jsoup en classpath):
package com..q2835505;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Test {
public static void main(String[] args) throws Exception {
String url = "https://.com/questions/2835505";
Document document = Jsoup.connect(url).get();
String question = document.select("#question .post-text").text();
System.out.println("Question: " + question);
Elements answerers = document.select("#answers .user-details a");
for (Element answerer : answerers) {
System.out.println("Answerer: " + answerer.text());
}
}
}
Como habrás adivinado, esto imprime tu propia pregunta y los nombres de todos los que responden.
jsoup admite Java 1.5
https://github.com/tburch/jsoup/commit/d8ea84f46e009a7f144ee414a9fa73ea187019a3
parece que esa pila era un error, y se ha solucionado
JTidy , es similar a JSoup, pero no sé JSoup. JTidy maneja el HTML roto y devuelve un Documento w3c, por lo que puede usarlo como fuente para XSLT para extraer el contenido que realmente le interesa. Si no conoce XSLT, entonces podría ir con JSoup, ya que el Documento modelo es más agradable para trabajar que w3c.
EDITAR: Un vistazo rápido en el sitio web JSoup muestra que JSoup puede ser la mejor opción. Parece ser compatible con los selectores de CSS para extraer elementos del documento. Puede ser mucho más fácil trabajar con esto que ingresar a XSLT.