¿Usar Java para extraer datos de una página web?

Estoy intentando hacer mi primer progtwig en Java. El objective es escribir un progtwig que busque en un sitio web y me descargue un archivo. Sin embargo, no sé cómo usar Java para interactuar con Internet. ¿Alguien puede decirme qué temas buscar / leer o recomendar algunos buenos recursos?

La solución más simple (sin depender de ninguna biblioteca o plataforma de terceros) es crear una instancia de URL que apunte a la página web / enlace que desea descargar y leer el contenido mediante transmisiones.

Por ejemplo:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class DownloadPage { public static void main(String[] args) throws IOException { // Make a URL to the web page URL url = new URL("http://stackoverflow.com/questions/6159118/using-java-to-pull-data-from-a-webpage"); // Get the input stream through URL Connection URLConnection con = url.openConnection(); InputStream is =con.getInputStream(); // Once you have the Input Stream, it's just plain old Java IO stuff. // For this case, since you are interested in getting plain-text web page // I'll use a reader and output the text content to System.out. // For binary content, it's better to directly read the bytes from stream and write // to the target file. BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; // read each line and write to System.out while ((line = br.readLine()) != null) { System.out.println(line); } } } 

Espero que esto ayude.

Los basicos

Mire estos para construir una solución más o menos desde cero:

  • Comience desde lo básico: el capítulo del Tutorial de Java sobre Redes , que incluye Trabajar con URLs
  • Hágalo más fácil: Apache HttpComponents (incluido HttpClient)

El material fácilmente engomado y cosido

Siempre tiene la opción de llamar a herramientas externas desde Java utilizando exec() y métodos similares. Por ejemplo, puede usar wget o cURL .

The Hardcore Stuff

Entonces, si quieres entrar en algo más completo, afortunadamente, la necesidad de pruebas web automatizadas nos ha dado herramientas muy prácticas para esto. Mirar:

  • HtmlUnit (poderoso y simple)
  • Selenio , Selenio-RC
  • WebDriver / Selenium2 (aún en proceso)
  • JBehave con JBehave Web

Algunas otras librerías están redactadas a propósito con desguace de web en mente:

  • JSoup
  • Excursión

Algunas soluciones

Java es un lenguaje, pero también una plataforma, con muchos otros lenguajes corriendo en él. Algunos de los cuales integran gran azúcar sintáctico o bibliotecas para construir fácilmente scrappers.

Revisa:

  • Groovy (y su XmlSlurper )
  • o Scala (con gran soporte XML como se presenta aquí y aquí )

Si conoce una gran biblioteca para Ruby ( JRuby , con un artículo sobre raspado con JRuby y HtmlUnit ) o Python ( Jython ) o si prefiere estos idiomas, brinde una oportunidad a sus puertos JVM.

Algunos suplementos

Algunas otras preguntas similares:

  • Raspe datos de HTML usando Java
  • Opciones para raspar HTML

Aquí está mi solución usando URL y try with resources frase de try with resources para captar las excepciones.

 /** * Created by mona on 5/27/16. */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; public class ReadFromWeb { public static void readFromWeb(String webURL) throws IOException { URL url = new URL(webURL); InputStream is = url.openStream(); try( BufferedReader br = new BufferedReader(new InputStreamReader(is))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (MalformedURLException e) { e.printStackTrace(); throw new MalformedURLException("URL is malformed!!"); } catch (IOException e) { e.printStackTrace(); throw new IOException(); } } public static void main(String[] args) throws IOException { String url = "https://madison.craigslist.org/search/sub"; readFromWeb(url); } } 

También puede guardarlo en un archivo según sus necesidades o analizarlo mediante bibliotecas XML o HTML .