2013-04-04 22 views
0

好的,我開始進行必應搜索,然後檢索一對結果網址,並以這些網址爲出發點遍歷其他頁面,解析其中的鏈接並將它們添加到列表中。如何忽略已經訪問的域名? Java | Jsoup

我遇到的問題是,我不想兩次訪問相同的域。我可以阻止它訪問相同的URL,但如果一個頁面有鏈接到另一個網站部分(如關​​於頁面),我不能。 目前我有一個LinkedList,我在每次使用Jsoup解析文檔時添加一個URL。我有一個HashMap用於存儲已訪問的URL。所以,我有它設置在一個基本的「如果」是這樣的:

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

這是一個循環,我檢索每個頁面(目前是4個線程處理4頁)的鏈接。

這會阻止它加入類似「http://www.stackoverflow.com」的兩次,但如果我遇到「http://www.stackoverflow.com/questions/ask」,則不起作用。

我想從StackOverflow添加一個鏈接(例如),然後用該域名完成。有任何想法嗎?

我在Java中使用Jsoup API來分析結果。

+0

什麼是'url'類型? – 2013-04-04 17:09:40

+0

將網址分開並僅使用網域部分,而不是整個網址。 – 2013-04-04 17:11:11

+0

「url」是一個字符串,Ivan – UserBruiser 2013-04-04 17:13:47

回答

2

您可以使用URI類來解析您的網址。我也推薦使用Set<String>來存儲訪問域:

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

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

這可能會起作用,如果列表太大(RAM分析空間太大)可能需要將Set 移動到另一個jsm(緩存)或db。此外,數據庫將幫助你跨應用程序啓動 – tgkprog 2013-04-04 18:53:31

相關問題