2016-08-04 76 views
1

我有以下代碼天氣網站jsoup的Java

`

import java.io.IOException; 

import org.jsoup.*; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
import java.io.*; 
public class da { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    try { 


      Document doc=Jsoup.connect("http://www.vremea.net/").get(); 
      Elements e=doc.select(".homeContent>ul>li "); 
      PrintStream ps=new PrintStream(new FileOutputStream("io")); 
       for(int i=0;i<e.size();i++) 
        {ps.println(e.get(i).text()); 
       System.out.println(e.get(i).text());} 


    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 

} 

` 我想訪問這個網站http://www.vremea.net/並沒有「歸屬的內容」,它有更多的「UL」每一個與「李」。我的代碼遍歷所有「ul」,但正如你可以在網站上看到的,它沒有得到那些「ul」(我得到第二列,第三,第四,然後第一),我的問題是爲什麼它按此順序?

編輯:什麼可能是這樣做的更通用的方式(我的意思是如果這個網站的所有者想修改結構能夠得到這個列表像我這裏沒有修改代碼)?

回答

2

當你的代碼似乎是正確的,我把你的代碼(格式化一點點)

public class NewClass { 
    public static void main(String[] args) { 
     try { 
      Document doc = Jsoup.connect("http://www.vremea.net/").get(); 
      Elements e = doc.select(".homeContent>ul>li "); 
      PrintStream ps = new PrintStream(new FileOutputStream("io")); 
      for (int i = 0; i < e.size(); i++) { 
       ps.println(e.get(i).text()); 
       System.out.println(e.get(i).text()); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

與Jsoup 1.9.2和1.8.3的Java8u60,Java8u91和Java7執行它。

在每次執行的,我碰到下面的輸出,我以爲是你在尋找什麼:

• Bucuresti 
• Adjud 
• Aiud 
• Alba Iulia 
• Alexandria 
• Arad 
• Bacau 
• Baia Mare 
• Bailesti 
• Barlad 
• Beius 
• Bistrita 
• Blaj 
• Botosani 
• Brad 
• Braila 
• Brasov 
• Buzau 
• Calafat 
• Calarasi 
• Campia Turzii 
• Campina 
• Campulung Moldovenesc 
• Campulung-Muscel 
• Caracal 
• Caransebes 
• Carei 
• Cluj-Napoca 
• Codlea 
• Constanta 
• Craiova 
• Curtea de Arges 
• Dej 
• Deva 
• Dorohoi 
• Dragasani 
• Drobeta-Turnu Severin 
• Fagaras 
• Falticeni 
• Fetesti 
• Focsani 
• Galati 
• Gheorgheni 
• Gherla 
• Giurgiu 
• Hunedoara 
• Husi 
• Iasi 
• Lugoj 
• Lupeni 
• Mangalia 
• Marghita 
• Medgidia 
• Medias 
• Miercurea Ciuc 
• Moinesti 
• Moreni 
• Motru 
• Odorheiu Secuiesc 
• Oltenita 
• Onesti 
• Oradea 
• Orastie 
• Orsova 
• Pascani 
• Petrosani 
• Piatra Neamt 
• Pitesti 
• Ploiesti 
• Radauti 
• Ramnicu Sarat 
• Ramnicu Valcea 
• Reghin 
• Resita 
• Roman 
• Rosiori de Vede 
• Sacele 
• Salonta 
• Satu Mare 
• Sebes 
• Sfantu Gheorghe 
• Sibiu 
• Sighetu Marmatiei 
• Sighisoara 
• Slatina 
• Slobozia 
• Suceava 
• Targoviste 
• Targu Jiu 
• Targu Mures 
• Targu Secuiesc 
• Tarnaveni 
• Tecuci 
• Timisoara 
• Toplita 
• Tulcea 
• Turda 
• Turnu Magurele 
• Urziceni 
• Vaslui 
• Vatra Dornei 
• Vulcan 
• Zalau 
• Zimnicea 

所以我無法重現您所描述的行爲。 您可能想要嘗試一個不同的或更新的Jsoup版本(甚至是Java),並測試您的問題是否仍然存在。

+0

沒有。你的輸出就像我的,但是是錯誤的。如果你看下面的地圖,你會看到有4列,如果你看看你的名字,你會發現你從第二個開始。這也是我發生的事情。 – User124235

+1

對不起,我還沒有得到它。 我正在看標題下方的地圖「羅馬尼亞的主要當地文化中的Vremea」。有4列,每個從左到右的第一個元素是「布加勒斯特」,「Carei」,「Medgidia」,「Satu Mare」。 我看到它們按字母順序排列(從上到下,從左到右),但我也困惑爲什麼第一個以'B'開頭。 – Nithanim

+0

今天當我進入該網站的列在哪裏像輸出。我不知道爲什麼當我問這個問題時,他們在其他方面(在我的電腦上),但今天他們就像我的輸出和output.thx無論如何你的時間來回應和搜索錯誤 – User124235

1

即使您發現問題,只想指出Document.select()返回Elements,其中ArrayList作爲超類。你可以直接迭代它。

for (Element item : doc.select(".homeContent > ul > li > a")) 
     System.out.println(item.ownText()); 
+1

確定thx的建議 – User124235