2016-09-03 6 views
1

大学のウェブサイトを解析して、メインサイトからニュース(タイトル+リンク)のリストを取得しようとしていました。私は完全なウェブサイトを解析しようとしているようしかし、私が探していますリンクは、他のクラスやテーブルなどに深くネストされているここで私が使用しようとしたコードは次のとおりです。Jsoupを使用して特定のクラスからすべてのhref値を取得する

String url = "http://www.portal.pwr.wroc.pl/index,241.dhtml"; 
    Document doc = Jsoup.connect(url).get(); 
    Elements links = doc.select("table.cwrapper .tbody .tr td.ccol2 div.cwrapper_padd div#box_main_page_news.cbox.grey div#dyn_main_news.cbox.padd2 div.nitem table.nitemt .tbody .tr td.nitemcell2 span.title_1"); 
    ArrayList <String> listOfLinks = new ArrayList <String>(); 
    int counter = 0; 


    for (Element link : links) { 

     listOfLinks.add(link.text()); 

    } 

しかし、それは動作しません。 。

<span class = "title_1"> 
    <a href="Link Adress">Link Title</a> 
</span> 

はたぶん、ループのいくつかの種類が、それは価値を取って、これらのタグのすべてを反復処理します:それらの一つ一つが中に配置されている場合、すべてのそれらのリンクのhref値とタイトルを取得するための良い方法は、あります彼らから?助けのための

おかげで

+0

はなぜ単に '、(「[HREF]を」)doc.selectをしません;'選択によって返される要素の各要素に対して '.attr(" href ")'と '.text()'を呼び出します。 –

答えて

1

あなたの主な問題は、あなたが探している情報は、あなたが使用しているURLに存在しますが、http://www.portal.pwr.wroc.pl/box_main_page_news,241.dhtml?limit=10でないということです。
あなたはまず、そのページを取得する必要があり、これを使用するよりも(それはホバークラフトとアンドレイ・volgonの回答の組み合わせだ) -

String url = "http://www.portal.pwr.wroc.pl/box_main_page_news,241.dhtml?limit=10"; 
String baseURL = "http://www.portal.pwr.wroc.pl/"; 
Document doc = Jsoup.connect(url).get(); 
Elements links = doc.select(".title_1 > a"); 
for (Element link : links) { 
    System.out.println("Title - " + link.text()); 
    System.out.println(baseURL + link.attr("href")); 
} 
+0

ありがとう!どのようにそのリンクを見つけることができましたか? – TheTechGuy96

+1

まあ、私はページをダウンロードし、それが 'title_1' divを含んでいないことを見ました。次に、ブラウザの開発ツールを開いて、メインページをダウンロードするときに複数の 'get/post'リクエストがあることを確認しました。幸いにもそれは第二の要求でした。 – TDG

0

:-)あなたは右の要素を選択し、少なくとも複雑な独自のセレクターを見つける必要があります。あなたのケースでは、溶液は非常に単純です:

doc.select(".title_1 > a") 
0

はなぜ単にdoc.select("a[href]");、行い、その後、選択によって返される要素の各要素に.attr("href").text()を呼び出しませんか?例えば

String path = "http://www.portal.pwr.wroc.pl/index,241.dhtml"; 
int timeoutMillis = 10 * 1000; 
try { 
    URL url = new URL(path); 
    Document doc = Jsoup.parse(url, timeoutMillis); 

    Elements selections = doc.select("a[href]"); 
    String format = "%-40s %s%n"; 
    for (Element element : selections) { 
     System.out.printf(format, element.attr("href"), element.text()); 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

OPが望んでいる7つのリンクだけを選択するのが簡単なときに、すべてのリンクを調べるポイントは何ですか? –

関連する問題