java - 如何忽略已经访问过的域? java |汤普

标签 java parsing jsoup

好的,我开始进行 Bing 搜索,然后检索几个结果网址,并使用这些网址作为遍历其他页面的起点,解析其中的链接并将它们添加到列表中。

我遇到的问题是,我不想两次访问同一个域。我可以阻止它访问相同的 URL,但如果某个页面具有指向网站另一部分(例如“关于”页面)的链接,我就不能阻止它。 目前,我有一个 LinkedList,每次使用 Jsoup 从文档中解析一个 URL 时,我都会在其中添加一个 URL。我有一个 HashMap 用于存储已访问过的 URL。所以我把它设置在一个基本的“if”中,如下所示:

if(!urlsVisited.containsKey(url))
{
    urlsToVisit.add(url);
    urlsVisited.put(url, url); 
}

这是一个 for 循环,我在其中检索每个页面上的链接(当前有 4 个线程处理 4 个页面)。

这会阻止它两次添加“http://www.stackoverflow.com”之类的内容,但如果我遇到“http://www.stackoverflow.com/questions/ask”,则不起作用。

我想添加一个来自 StackOverflow 的链接(例如),然后使用该域完成操作。有什么想法吗?

我在 Java 中使用 Jsoup api 来解析结果。

最佳答案

您可以使用URI类来解析你的 URL。我还建议使用 Set<String>存储访问过的域:

Set<String> urlsVisited = new HashSet<String>();
...

String domain = new URI(url).getHost();
if(!urlsVisited.contains(domain))
{
    urlsToVisit.add(url);
    urlsVisited.add(domain); 
}

关于java - 如何忽略已经访问过的域? java |汤普,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817443/

相关文章:

HTML DOM 验证器 - PHP 或 JavaScript

java - 如何使用 JSoup 打印此 HTML 表格的内容?

java - jsoup是否下载CSS、JS和图片

java - 时间(以小时为单位):Minute:second format in j2me

java - Gmail JavaMail 邮件检索问题

json - 在 Golang 中解析 JSON 时出错

java - 帮助 Java SAX 解析器理解错误的 xml

java - 查找数组中的绝对最小值

java - 从其他线程更新 Swing GUI

java - Maven 不会创建可运行的 jar