簡體   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