2016-08-04 78 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