我有以下代码
`
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;按顺序(我得到第二列,第三列,第四列,然后是第一列),我的问题是为什么它按此顺序排列?
编辑:这可能是一种更通用的方式(我的意思是如果这个网站的所有者想要修改结构,以便像我在这里那样获得这个列表而不修改代码)?答案 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());