[英]Get all img src with Jsoup
我有 html 代碼和以下img src
部分:
<img src="https://lh3.googleusercontent.com/...rw" srcset="https://lh3.googleusercontent.com/...rw 2x" class="T75of DYfLw" width="551" height="310" alt="Screenshot Image"">
<img data-src="https://lh3.googleusercontent.com/...w720-h310-rw" ... data-srcset="https://lh3.googleusercontent.com/... w1440-h620-rw 2x" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="width="551" height="310" alt="Screenshot Image">
我想獲取所有具有屬性alt=Screenshot Image
的屏幕截圖。 所以我需要屬性srcset
和data-srcset
中的值(2 個不同的屬性名稱 = 2 個不同的情況)。
我寫了這段代碼:
List<String> src = htmlDocument.select("img[src]").stream()
.filter(img -> img.attr("alt").equals("Screenshot Image"))
.map(element -> element.absUrl("data-srcset").replace("2x", ""))
//or for 1st case
.map(element -> element.absUrl("srcset")..
//
.collect(Collectors.toList());
但是現在我無法從第一種情況中得到這個值,這個屬性是srcset
,而不是data-srcset
。 我可以在沒有額外迭代的情況下獲得這兩種情況的 src - 比如不創建另一個 stream 然后將所有結果合並到一個集合中? 也許Jsoup庫中的一些正則表達式和另一種方法(似乎.absUrl
不適用於正則表達式)可以提供幫助?
而且我不喜歡帶有replace
的部分(也許某些 src 將包含 2x 作為自己的部分)。
.map(element -> element.absUrl("data-srcset").replace("2x", ""))
但是如果沒有這種操作,我會得到不正確的 src。
https://lh3.googleusercontent.com/Z...=w1440-h620-rw 2x
我可以用其他方法改進這個replace
解決方案嗎?
您可以嘗試創建 collections 的集合,然后創建 flatMap
List<String> src = htmlDocument.select("img[src]").stream()
.filter(img -> img.attr("alt").equals("Screenshot Image"))
.map(element -> {
List<String> url = new ArrayList<>();
url.add( element.absUrl("data-srcset").replace("2x", ""));
url.add( element.absUrl("srcset"));
return url;
})
.flatMap(List::stream)
.collect(Collectors.toList());
對於您的最后一個答案,假設您的網址不包含您可以使用的空格
StringUtils.substringBefore(element.absUrl("data-srcset")," ")
編輯
我假設您可以在同一個圖像中同時擁有 srcset 和 data-srcset 。 再次閱讀我最終得到了一個更好的方法
List<String> src = htmlDocument.select("img[src]").stream()
.filter(img -> img.attr("alt").equals("Screenshot Image"))
.map(element -> StringUtils.isNotEmpty(element.absUrl("srcset")) ?
element.absUrl("srcset") :
element.absUrl("data-srcset").replace("2x", ""))
.collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.