java web screen-scraping jsoup

Error "Exception in thread" main "java.lang.NullPointerException" al ejecutar el programa web scraper



screen-scraping jsoup (3)

Soy bastante nuevo en el web scraping y tengo conocimientos limitados sobre Java.

Cada vez que ejecuto este código, obtengo el error:

Exception in thread "main" java.lang.NullPointerException at sws.SWS.scrapeTopic(SWS.java:38) at sws.SWS.main(SWS.java:26) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)

Mi código es:

import java.io.*; import java.net.*; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class SWS { /** * @param args the command line arguments */ public static void main(String[] args) { scrapeTopic("wiki/Python"); } public static void scrapeTopic(String url) { String html = getUrl("http://www.wikipedia.org/" + url); Document doc = Jsoup.parse(html); String contentText = doc.select("#mw-content-text > p").first().text(); System.out.println(contentText); } public static String getUrl(String Url) { URL urlObj = null; try { urlObj = new URL(Url); } catch(MalformedURLException e) { System.out.println("The url was malformed"); return ""; } URLConnection urlCon = null; BufferedReader in = null; String outputText = ""; try { urlCon = urlObj.openConnection(); in = new BufferedReader(new InputStreamReader(urlCon.getInputStream())); String line = ""; while ((line = in.readLine()) != null) { outputText += line; } in.close(); } catch(IOException e) { System.out.println("There was a problem connecting to the url"); return ""; } return outputText; } }

¡He estado mirando mi pantalla por algún tiempo y necesito ayuda!

Gracias por adelantado.


En el siguiente código:

String contentText = doc.select("#mw-content-text > p").first().text()

Si doc.select("#mw-content-text > p") no encuentra ningún elemento que coincida con la consulta y devuelve un elemento vacío , llamar a first() en dicho elemento debería dar una NullPointerException .

compruebe la página del documento jsoup de Element.select y Elements.first ()


En esta linea

doc.select("#mw-content-text > p").first().text();

Su doc.select obviamente no encuentra nada, por lo que devuelve nulo. A continuación, llama al método first() en null y es por eso que termina con un error.


Tu código funciona bien para mí exactamente como es.

A fin de depurar y diagnosticar si los posibles errores indicados por otras respuestas, es mejor que utilice algunas variables temporales y pase por el código en un depurador.

public static void scrapeTopic(String url) { String html = getUrl("http://www.wikipedia.org/" + url); Document doc = Jsoup.parse(html); Elements select = doc.select("#mw-content-text > p"); Element first = select.first(); String contentText = first.text(); System.out.println(contentText); }