好的,我开始进行 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/