【问题标题】:Parse relative data using h2 in jsoup在 jsoup 中使用 h2 解析相关数据
【发布时间】:2019-12-04 05:40:55
【问题描述】:

我正在尝试使用 Java 中的 Jsoup 从网站获取一些数据,但在弄清楚如何获取数据时遇到了一些困难。我有一组项目名称,只想从网站上获取具有相似名称的项目。正如您在下面提供的 html 代码中看到的那样,名称存储在 h2 中,我正在尝试使用 h2 中的数据来获取相对 src 来定位它。

我正在使用的 html 的示例 sn-p: (这些 div 有多个)

<div class="item-class" data-name="nameOfItem">
    <div id="item-3000" class="second-item-class">
        <img src="/content/items/getthis.png">
        <h2>I have these item names</h2>
    </div>
</div>

我只考虑如何定位 h2,但甚至无法让它工作,所以我想有人可能知道如何使用我拥有的 h2 数据来定位数据,匹配两者起来,并以某种方式检索 src 数据。以下是我到目前为止尝试查找 h2 数据的方法: (只是为了澄清变量的名称是为了说明问题,它们实际上并没有在我的代码中命名)

for(int i = 0; i < h2ItemNames.size(); i++){
    Elements srcData = doc.select(h2ItemNames.get(i));
    System.out.println("srcData: " + srcData.toString());
}

想知道这是否可能,或者我是否应该采取不同的路线,在我看来这是完全可行的,我只是没有使用 jsoup 来解决这个问题。希望有人知道如何在通过其中保存的数据定位 h2 后获取 src 数据,而不是搜索标签本身(我知道该怎么做),因为整个网站有很多标签。

【问题讨论】:

    标签: java android html jsoup


    【解决方案1】:

    如果您已经选择了h2,您可以通过获取previousElementSibling 来访问img

    for(int i = 0; i < h2ItemNames.size(); i++){
        Element h2 = doc.select(h2ItemNames.get(i)).first();
        Element img = h2.previousElementSibling();
        String src = img.attr("src");
        System.out.println("src: " + src);
    }
    

    但如果img 并不总是前一个元素,您可以尝试向上移动一级并选择第一个img

    for(int i = 0; i < h2ItemNames.size(); i++){
        Element h2 = doc.select(h2ItemNames.get(i)).first();
        Element parent = h2.parent();
        Element img = parent.select("img").first();
        String src = img.attr("src");
        System.out.println("src: " + src);
    }
    

    【讨论】:

    • 如果需要完整的 src 路径,可以使用 .attr("abs:src") 而不是从 src 重建完整路径并自己托管。
    • 经过一番折腾,感谢上面的代码,它确实有很大帮助。不过,我不得不做出一项改变。元素 h2 = doc.select("h2:contains(" + h2ItemNames.get(i) + ")").first();这允许将数组用作字符串变量,如果我只是像在您提供的代码中那样使用变量进行搜索,它将返回一个空对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多