在我的抓取功能中,我检索DOM中存在的链接。
Elements links = doc.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
if(linkHref.contains("/blog/")){
System.out.print("Link: " + linkHref + "\n");
}
}
这很有效。
我想知道的是删除Elements对象中的重复链接。
有可能吗?如果没有,我会很容易找到一个使用字符串数组的解决方法,但我更喜欢惯用的解决方案。
谢谢
答案 0 :(得分:3)
您可以使用Hello world
实现此目的。 HashSet
是一个存储唯一元素集的数据结构,因此如果有重复的链接,您将无法在HashSet中使用它们。
HashSet
答案 1 :(得分:1)
JSOUP从DOM中提取的元素彼此不相等,即使它们包含完全相同的标记,属性和值。这确实造成了过去的混乱,并且被简要地改变了,然后我记得更加混乱(见https://github.com/jhy/jsoup/issues/561)
所以你应该在JSOUP之外使用解决方案。根据您实际考虑的相同元素,您可以使用适当的东西填充HashSet。如果if是JSOUP锚元素的所有属性和值,那么您需要做一些额外的工作,以防您无法保证HTML元素中属性的顺序。所以你可以这样做:
Initialize a HashSet
for each link Element:
extract all properties and values
sort the properties
concatenate to each property its value
concatenate all perperty-value strings
see if the perperty-value string is contained in your Hashset
if yes you found a new Element, so put it in the HashSet and do whatever you want
continue with next Elememnt