簡體   English   中英

Jsoup是否不匹配沒有某些屬性的標簽?

[英]Jsoup not matching tags without certain attributes?

我有一個函數,給定一個div元素,它將在其中找到所有img元素。 唯一的問題是僅選擇了前三個。 前3個和其余3個之間的唯一區別是包含屬性(類和alt)

Document doc = Jsoup.connect("http://www.dhgate.com/wholesale/kitchen-fixtures/c019034002-1.html").get();
Elements elements = doc.select("div.prolist");
for (Element e : elements) {
    String img[] = getImagesSrc(e, 1);
}
....
protected String[] getImagesSrc(Element e, int numOfImages) {
    String src[];
    src = new String[numOfImages];
    int i = 0;
    Elements imgElements = e.select("img[src]");
    for (Element o : imgElements) {
        System.out.println("html = " + o.outerHtml());
        src[i++] = o.attr("src");
    }
    return src;
}

一些示例div元素 (這些是傳遞給函數的內容)

<div class="prolist">
  <a href="some link"><img class="folder" alt="Folder" src="folder.jpg"/></a>
</div>
<div...
...div>
<div class="prolist">
  <a href="some link"><img src="folder.jpg"/></a>
</div>

我不應該獲取所有圖片,無論其內容如何?

我已經使用來自網站和本地主機的相同HTML結構測試了代碼。 該代碼在locahost上有效,但在網站(www.dhgate.com)上無效

已解決-該站點使用了lazyload插件,因此檢查器中的HTML讀取的內容與Jsoup有所不同。 在我的情況下,我必須包含帶有[class〜= lazyload]的'a'標簽

該程序的確獲得了帶有prolist類的div元素中所有img標簽的源代碼。 但是,您應考慮到某些問題,具體取決於您的完整程序。

for (Element e : elements) {
    String img[] = getImagesSrc(e, 1);
}

在第一個循環中,每次迭代都會覆蓋img數組。 因此,如果您有多個帶有prolist類的div元素,則每個元素的img標簽數組將覆蓋另一個元素。 如果要獲取整個img或所有div標簽,請將getImagesSrc()方法參數更改為Elements並直接傳遞doc.select("div.prolist")

getImagesSrc()方法的第二個參數用於初始化數組。 因此,如果我們有多個img標簽,則會導致ArrayOutOfBoundException。 圖像標簽的數量不確定。 因此,在這種情況下,您應該使用List 如果需要數組,可以稍后在列表中列出一個數組。 例如

protected String[] getImagesSrc(Element e) {
    List<String> imgSources = new ArrayList<String>();
    Elements imgElements = e.select("img[src]");
    for (Element o : imgElements) {
       imgSources.add(o.attr("src"));
    }
    return imgSources.toArray(new String[imgSources.size()]);
}

另請注意,由於您要像e.select("img[src]"); ,則只會返回具有src屬性的img標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM