2016-11-25 9 views
0

JavaとJsoupのまったく新しいものです。私はウェブを掻き集め、Javaで株式市場のデータを提供する簡単なプログラムを作成しようとしています。私はダウ・ジョーンズの株式から始まり、52週間のレンジ・データを印刷したいと考えています。それはhttp://finance.yahoo.com/quote/AAPL?ltr=1に行き、下の左の表(前の終わりで始まる)を見て、5番目の索引に行き、そこからテキスト値を取得します。私はエラーを取得する:スレッド内Java Jsoupウェブサイトのデータを盗む問題

例外 "メイン" org.jsoup.select.Selector $ SelectorParseException:クエリを解析できませんでした 'table.W(100%)':で予期しないトークン '(100%)'

どこかで、私はテーブルクラスが間違っていますか?このコードを動作させるにはどうすればよいですか?

私は延期(AAPL)株式リンゴで開始し、Jsoupで、この思い付いた:


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); 

    } 
} 

答えて

0

は、最初にすべてのテーブル要素をつかみ、そのクラスで1を選択してみてください:

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

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

Htmlパーサーは、()を使用して要素を処理して解析できないため、エラーがスローされます。これは、この問題を回避する簡単な回避策です。

+0

ありがとうございました。今、Element row = table.select( "tr")を実行すると、Nullpointerexceptionでいくつかの問題が発生しています。それはすべての行を正しく取得する必要がありますか? – Joeysk

+0

はい、すべてのテーブル行を取得する必要があります。ただし、要素ではなく要素が返されます。 APIへのリンクは、すべてのメソッドが何を返すかを調べるためのものです:https://jsoup.org/apidocs/ – Justin

関連する問題