繁体   English   中英

如何使用JSoup在Java中获取特定的标签属性文本?

[英]How to get a specific tag attribute text in java with JSoup?

我想在属性中获取url,但是每次运行代码时,都会收到错误消息。 以下是我要从中提取链接的源URL的片段:

  **<section class="rslwrp ">
  <div id="tab-5" class="tab-contentphone current">
  <ul class="rsl col-md-12 padding0">
  <input type="hidden" id="closedown_flag0" value="0">
  <li class="cntanr" data-href="https://www.somelink.com" >**

我正在运行的代码

public class Wholelist {
static String url = "https://www.somewebsite.com"; 
static Document doc;
public static void main(String args[]) throws IOException {
    doc = getDoc(url);
    getlink(doc);
}
@SuppressWarnings("deprecation")
static Document getDoc(String url){
    try {
        return   Jsoup.connect(url).userAgent("mozilla/17.0").validateTLSCertificates(false).get();
    } catch (IOException e) {
        e.printStackTrace();
         return null;
    }
}
public static void getlink(Document doc1){
    Element elementlink = doc1.select("section.rslwrp").get(3).select("li.cntanr").get(5);
    String url = elementlink.attr("data-href"); 
    String Link = url;
    System.out.println(Link);
}
}

请指定我的错误,并告诉我正确的方法。

rslwrp的节是否多于1? 您正在调用第三个元素,但是只有一个元素,因此索引超出范围异常:

    Element elementlink = doc1.select("section.rslwrp").get(3).select("li.cntanr").get(5);
Element elementlink = doc1.select("section.rslwrp").get(3).select("li.cntanr").get(5);

在上一行中,首先检查所选元素是否存在。 如果选择的元素不为空,则仅检索该元素。

Element elementlink = null;
Elements sectionElements = doc1.select("section.rslwrp");
if(!sectionElements.isEmpty() && elementlink.size() >= 3) {
    Elements liElements = elementlink.get(3).select("li.cntanr");
    if(!liElements.isEmpty() && liElements.size() >= 5) {
        elementlink = liElements.get(5);
    }
}

似乎您正在尝试获取第三个不存在的“ section”元素(只有一个)。 该代码将与您的数据一起使用

Element elementlink = doc1.select("section.rslwrp").first().select("li.cntanr").first();
String url = elementlink.attr("data-href");
System.out.println(url);

并按预期打印https://www.somelink.com 希望能帮助到你!

注释后编辑:如果我对您的理解正确,则可以完成工作。

List<String> urls = doc.select("section.rslwrp").first().select("li.cntanr")
        .stream().map(e -> e.attr("data-href")).collect(Collectors.toList());
System.out.println(urls);

您以错误的方式使用选择不需要使用两个单独的选择,并且使用get()返回错误的元素即可使用URL

Element elementlink = doc1.select("li.cntanr").first();
String url = elementlink.attr("data-href"); 
String Link = url;
System.out.println(Link);

通过此选择,您可以直接获取您的li元素

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM