天气网站jsoup java

时间:2016-08-04 19:15:23

标签: java html jsoup

我有以下代码

`

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/,并且有#34;主页内容&#34;哪个有更多&#34; ul&#34;每个人都有&#34; li&#34;。我的代码遍历所有&#34; ul&#34;但正如你在网站上看到的那样,它并没有得到那些&#34; ul&#34;按顺序(我得到第二列,第三列,第四列,然后是第一列),我的问题是为什么它按此顺序排列?

编辑:这可能是一种更通用的方式(我的意思是如果这个网站的所有者想要修改结构,以便像我在这里那样获得这个列表而不修改代码)?

2 个答案:

答案 0 :(得分: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();
        }
    }
}

并在Java8u60,Java8u91和Java7上使用Jsoup 1.9.2和1.8.3执行它。

在每次执行时,我得到以下输出,我认为这正是您所寻找的:

• 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)并测试问题是否仍然存在。

答案 1 :(得分:1)

即使你发现了这个问题,也只是想指出Document.select()返回Elements,其ArrayList为超类。你可以直接迭代它。

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