代码:
Document doc = Jsoup.connect("things.com").get();
Elements jpgs = doc.select("img[src$=.jpg]");
String links = jpgs.attr("src");
System.out.print("all: " + jpgs);
System.out.print("src: " + links);
输出:
all:
<img alt="Apple" src="apple.jpg">
<img alt="Cat" src="cat.jpg">
<img alt="Boat" src="boat.jpg">
src: apple.jpg
Jsoup给出了第一个元素的属性值。我怎样才能得到其他人(cat.jpg和boat.jpg)?
谢谢。
答案 0 :(得分:1)
public String attr(String attributeKey) {
for (Element element : this) {
if (element.hasAttr(attributeKey))
return element.attr(attributeKey);
}
return "";
}
只会返回第一场比赛。
Elements#attr
Source Code Elements
要获得所需的结果,您应该遍历for (Element e : jpgs) {
System.out.println(e.attr("src"));
}
links
答案 1 :(得分:1)
您循环浏览s
并通过Element#attr
从每个for (Element e : jpgs) {
// use e.attr("src") here
}
获取,因为Elements#attr
(注意List<String>
)说:
从获取具有属性的第一个匹配元素的属性值。
(我的重点。)
例如:
List<String> links = jpgs.stream<Element>()
.map(element -> element.attr("src"))
.collect(Collectors.toList());
使用Java 8的new Stream
stuff,如果你愿意,你可以得到List<String> links = new ArrayList<String>(links.size());
for (Element e : jpgs) {
srcs.add(e.attr("src"));
}
个:
{{1}}
...但是我的Java 8 streams-fu 非常弱,所以可能不太正确。是的,那不对。但这是一般的想法。
无聊的老式方式是:
{{1}}