2017-06-13 86 views
0

我正在實現一個基本的爬蟲程序,以便稍後在漏洞掃描器中使用。我使用jsoup來連接/檢索和解析html文檔。如何使用jsoup從站點獲取可導航鏈接?

我手動提供目標站點的基礎/根目錄(www.example.com)並連接。

... 
Connection connection = Jsoup.connect(url).userAgent(USER_AGENT); 
Document htmlDocument = connection.get(); 
this.htmlDocument = htmlDocument; 
... 

然後我檢索頁面上的所有鏈接。

... 
Elements linksOnPage = htmlDocument.select("a[href]"); 
... 

之後,我在這些鏈接之間循環,並嘗試獲取網站上所有頁面的鏈接。

for (Element link : linksOnPage) { 
       this.links.add(link.absUrl("href")); 
    } 

問題如下。根據我得到的鏈接,有些鏈接可能不是新頁面的鏈接,甚至可能不鏈接到網頁。作爲例子,有鏈接,如:

什麼,我需要一些幫助白衣是對鏈接進行篩選,這樣我就只能鏈接到同一個根/基站點的新頁面。

+1

檢查:'link.startsWith( 「http://www.ics.uci.edu/」)' –

+0

元素jsoup中的對象沒有類似「startsWith」的方法,並且不以基本域(/pages.page2.html)開頭的鏈接可能仍然在同一個站點上,只是使用js進行導航。 – Vlad

+0

獲取'元素鏈接'對象的字符串url。然後在'url'上調用startsWith。使用js進行導航的鏈接必須具有相同的屬性。你可以用它們過濾 –

回答

1

這很簡單。檢查absUrl與圖像格式或JS和CSS結束:如果鏈接與域名開始

if(absUrl.startsWith("http://www.ics.uci.edu/") && !absUrl.matches(".*\\.(bmp|gif|jpg|png|js|css)$")) 
{ 

    //here absUrl starts with domain name and is not image or js or css 
} 
+0

由於您可以根據需要添加新的擴展程序,因此這對大多數情況都可以正常工作,但必須有更好的通用解決方案。從這裏https://jsoup.org/apidocs/我發現原來的選擇器「Elements linksOnPage = htmlDocument.select(」a [href]「);」可以像img [src〜=(?i)\\。(png | jpe?g)]一樣用正則表達式修改。問題是,我發現很難構建一個除.html之外的通用文件擴展名的正則表達式。 – Vlad