[英]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.