2017-06-13 43 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