gpt4 book ai didi

java - Jsoup:分别解析url链接

转载 作者:行者123 更新时间:2023-11-30 00:55:17 25 4
gpt4 key购买 nike

我使用 jsoup 解析来自 content 字符串的所有 url 链接,效果很好。

带有 url 的内容字符串的一部分,如您所见,链接显示在文本“下载说明:”、“镜像:”和“附加:”之后:

<u>Download Instructions:</u><br/>
<a class="postlink" href="https://test.com/info">https://test.com/info</a>
<br/>Mirror:<br/>
<a class="postlink" href="http://global.eu/navi.html">http://global.eu/navi.html</a>
<br/>Additional:<br/>
<a class="postlink" href="http://main.org/navi.html">http://main.org/navi.html</a>

现在我的目标是解析文本“下载说明:”和文本“镜像:”之后的所有网址(可以是多个)分别,“Additional”之后的 url 应该被忽略。

下面的代码 fragment 只解析它们并将它们添加到(url)数组列表中。

int j = 0;
Document doc = Jsoup.parse(content);
Elements links = doc.select("a.postlink");
for (Element el : links) {
String urlman = el.attr("abs:href");
if (urlman != null) {
url.add(j, urlman);
j++;
}
}

如果有人能提供帮助,那就太好了。

提前谢谢你。

最佳答案

根据您发布的结构,您可以检查之前的同级节点以找到描述 anchor 的节点(此处为 #text<u> 标记)。然后简单地进行某种形式的字符串比较。

示例代码

String source = "<u>Download Instructions:</u><br/><a class=\"postlink\" href=\"https://1test.com/info\">https://test.com/info</a><br/><a class=\"postlink\" href=\"https://2test.com/info\">https://test.com/info</a><br/><a class=\"postlink\" href=\"https://3test.com/info\">https://test.com/info</a><br/>Mirror:<br/><a class=\"postlink\" href=\"http://global.eu/navi1.html\">http://global.eu/navi.html</a><br/><a class=\"postlink\" href=\"http://global.eu/navi2.html\">http://global.eu/navi.html</a><br/>Additional:<br/><a class=\"postlink\" href=\"http://main.org/navi.html\">http://main.org/navi.html</a>";

Document doc = Jsoup.parse(source, "UTF-8");

List<String> downloadInstructionsUrls = new ArrayList<>();
List<String> mirrorUrls = new ArrayList<>();

for (Element el : doc.select("a.postlink")) {
Node previousSibling = el.previousSibling();

while( !(previousSibling.nodeName().equals("u") || previousSibling.nodeName().equals("#text")) ){
previousSibling = previousSibling.previousSibling();
}

String identifier = previousSibling.toString();

if(identifier.contains("Download Instructions")){
downloadInstructionsUrls.add(el.attr("abs:href"));
}else if(identifier.toString().contains("Mirror")){
mirrorUrls.add(el.attr("abs:href"));
}
}

System.out.println("Url for download instructions:");
downloadInstructionsUrls.forEach(url -> {System.out.println("\t"+url);});
System.out.println("Url for mirror:");
mirrorUrls.forEach(url -> {System.out.println("\t"+url);});

输出

Url for download instructions:
https://1test.com/info
https://2test.com/info
https://3test.com/info
Url for mirror:
http://global.eu/navi1.html
http://global.eu/navi2.html

关于java - Jsoup:分别解析url链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40278882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com