我正在尝试解析http://www.craigslist.org/about/sites以构建一组文本/链接,以使用此信息动态加载程序。到目前为止,我已经这样做了:
Document doc = Jsoup.connect("http://www.craigslist.org/about/sites").get();
Elements elms = doc.select("div.colmask"); // gets 7 countries
在此标记下方,我想要获得doc.select("div.state_delimiter,ul")
个标记。我设置了我的迭代器并进行了一段时间的查看并调用iterator.next().outerHtml();
。我看到每个国家的所有标签。
如何逐步浏览每个div.state_delimiter
,然后将文字拉下来直到
有一个</ul>
定义各个州/城市链接/文本的状态结束?
我正在玩这个并且可以通过将outerHtml()
设置为String
然后手动解析字符串来实现,但我确信有更简单的方法可以做到这一点。我已经尝试text()
并尝试了attr("div.state_delimiter")
,但我认为我正在弄乱模式/例程以正确执行此操作。想知道是否有人可以帮助我,并告诉我如何将div.state_delimiter放入文本字段然后<ul><li></li></ul>
我希望每个州<li></li>
下的所有<ul></ul>
。想抓住http://&amp;&amp; html与它一起尽可能简单。
答案 0 :(得分:7)
包含城市的<ul>
是<div class="state_delimiter">
的下一个兄弟。您可以使用Element#nextElementSibling()
从该div中获取它。这是一个启动示例:
Document document = Jsoup.connect("http://www.craigslist.org/about/sites").get();
Elements countries = document.select("div.colmask");
for (Element country : countries) {
System.out.println("Country: " + country.select("h1.continent_header").text());
Elements states = country.select("div.state_delimiter");
for (Element state : states) {
System.out.println("\tState: " + state.text());
Elements cities = state.nextElementSibling().select("li");
for (Element city : cities) {
System.out.println("\t\tCity: " + city.text());
}
}
}
doc.select("div.state_delimiter,ul")
没有做你想要的。它会返回文档的所有 <div class="state_delimiter">
和 <ul>
元素。如果您已经有了HTML解析器,那么通过字符串函数手动解析它是没有意义的。