【问题标题】:How do I parse an HTML document with JSoup to get a list of links?如何使用 JSoup 解析 HTML 文档以获取链接列表?
【发布时间】:2011-10-30 15:32:04
【问题描述】:

我正在尝试解析 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> 我想要每个州的 <ul></ul> 下的所有 <li></li> 。希望尽可能简单地获取与之相关的 http:// && html。

【问题讨论】:

    标签: java html-parsing jsoup


    【解决方案1】:

    包含城市的<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") 不会做你想做的事。它返回文档的all <div class="state_delimiter"> <ul> 元素。如果您手头已经有 HTML 解析器,那么通过字符串函数手动解析它是没有意义的。

    【讨论】:

    • 很棒的回复,谢谢,我现在看到了,我正在用你的例子来获得我需要的东西。
    • 不客气。由于您是新来的,因此请不要忘记在回答(最)有助于实际解决问题时将其标记为已接受。另见meta.stackexchange.com/questions/5234/…
    • 遇到了另一个问题,已处理好类别和子类别,但现在我被实际广告卡住了。 url=mobile.craigslist.org/ctd/2555119167.html ,我正在选择 body.posting 并从那里尝试获取 div.userbody 但由于某种原因无法获取。
    • 我不知道您所说的“我被实际广告所困扰”是什么意思。我在本地运行了上面的代码,它很好地打印了所有国家/州/城市。
    • 我点击了返回,评论在我真正想要完成之前发布了...你上面的代码很棒,帮助我获得国家、州、城市,这个例子让我得到每个城市的类别和子类别..但我无法获得实际的广告..我已经确定了我需要获得的标签,但无法通过 body.posting 标签@BalusC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2023-03-03
    • 2018-11-19
    • 2015-10-14
    • 2020-02-22
    相关资源
    最近更新 更多