Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何忽略已访问的域?Java | Jsoup_Java_Parsing_Jsoup - Fatal编程技术网

如何忽略已访问的域?Java | Jsoup

如何忽略已访问的域?Java | Jsoup,java,parsing,jsoup,Java,Parsing,Jsoup,好的,我开始Bing搜索,然后检索两个结果URL,并使用它们作为起点遍历其他页面,解析来自它们的链接并将它们添加到列表中 我遇到的问题是,我不想访问同一个域两次。我可以阻止它访问同一个URL,但如果一个页面有链接到网站的另一部分(例如关于页面),我就不能。 目前,我有一个LinkedList,每次使用Jsoup解析文档中的URL时,我都会在其中添加一个URL。我有一个HashMap来存储已经访问过的URL。因此,我将其设置为基本的“如果”: if(!urlsVisited.containsKey

好的,我开始Bing搜索,然后检索两个结果URL,并使用它们作为起点遍历其他页面,解析来自它们的链接并将它们添加到列表中

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

if(!urlsVisited.containsKey(url))
{
    urlsToVisit.add(url);
    urlsVisited.put(url, url); 
}
这是一个for循环,我在其中检索每个页面上的链接(目前有4个线程处理4个页面)

这会阻止它两次添加类似“”的内容,但如果遇到“”,则不会起作用

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


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

使用Java.net.URL类来提取主机名,并将其用作urlsVisited映射的键


使用java.net.URL类提取主机名,并将其用作urlsVisited映射的键


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

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

String domain = new URI(url).getHost();
if(!urlsVisited.contains(domain))
{
    urlsToVisit.add(url);
    urlsVisited.add(domain); 
}
Set urlsVisited=new HashSet();
...
字符串域=新URI(url).getHost();
如果(!urlsVisited.contains(域))
{
urlsToVisit.add(url);
urlsVisited.add(域);
}

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

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

String domain = new URI(url).getHost();
if(!urlsVisited.contains(domain))
{
    urlsToVisit.add(url);
    urlsVisited.add(domain); 
}
Set urlsVisited=new HashSet();
...
字符串域=新URI(url).getHost();
如果(!urlsVisited.contains(域))
{
urlsToVisit.add(url);
urlsVisited.add(域);
}

url的类型是什么??拉开url,只使用域部分,而不是整个url。“url”是一个字符串,“url”是什么类型的
url
?拉开url,只使用域部分,而不是整个url。“url”是一个字符串,如果列表太大,这会起作用(解析多个时的RAM空间)可能必须将集合移动到另一个jsm(缓存)或db。db还将帮助您跨应用程序启动停止这将起作用,如果列表太大(解析多个时的RAM空间),则可能必须将集合移动到另一个jsm(缓存)或db。db还将帮助您跨应用程序启动停止