2016-11-25 4 views
0

Völlig neu in Java und Jsoup. Ich versuche ein einfaches Programm zu erstellen, das das Web abscheuert und mir Daten auf dem Aktienmarkt in Java gibt. Ich möchte mit dow jones Aktien beginnen und die 52-Wochen-Bereichsdaten ausdrucken lassen. Es geht auf http://finance.yahoo.com/quote/AAPL?ltr=1 und schaut auf die untere linke Tabelle (die mit vorherigem Schließen beginnt) und geht bis zum 5. Index und erhält den Textwert von dort. Ich erhalte den Fehler:Java Jsoup Scraping Website Datenfehler

Exception in thread "main" org.jsoup.select.Selector $ SelectorParseException: Kann nicht analysieren Abfrage 'table.W (100%)': unerwartetes Token '(100%)'

Was bedeutet irgendwo in dort ich die Tischklasse falsch? Wie kann ich diesen Code arbeiten lassen?

Ich begann mit Apfel (AAPL) Aktien frist und kam mit dieser in Jsoup up:


import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class Scraper { 

public static void main(String[] args) throws Exception { 

    final Document doc = Jsoup.connect("http://finance.yahoo.com/quote/AAPL?ltr=1").get(); 

    Elements table = doc.select("table.W(100%)"); 
    Element row = table.select("tr").get(5); 

    final String number = row.select("td").text(); 
    System.out.println(number); 

    } 
} 

Antwort

0

ersten Versuchen greifen alle Tabellenelemente und dann mit dieser Klasse, die eine Auswahl:

Elements tables = doc.select("table"); 
Element table = null; 

for(Element tableElement : tables){ 
    if(tableElement.hasClass("W(100%)")){ 
     table = tableElement; 
    } 
} 

Der Html-Parser kann Elemente mit() auf ihnen nicht behandeln und analysieren, so dass ein Fehler ausgelöst wird. Dies ist eine einfache Problemumgehung, um dieses Problem zu vermeiden.

+0

Danke, es hat funktioniert. Jetzt bekomme ich nur einige seltsame Probleme mit Nullpointerexception, wenn ich Element row = table.select ("tr"); Das sollte alle Reihen richtig machen? – Joeysk

+0

Ja, das sollte alle Tabellenzeilen erhalten .. es würde jedoch Elements not Element zurückgeben. Hier ist ein Link zur API, um zu sehen, was alle Methoden sind/return: https://jsoup.org/apidocs/ – Justin