【发布时间】:2017-06-13 06:08:15
【问题描述】:
我正在实现一个基本的爬虫,目的是稍后在漏洞扫描器中使用。我正在使用 jsoup 来连接/检索和解析 html 文档。
我手动提供目标站点 (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"));
}
问题如下。根据我获得的链接,有些可能不是指向新页面的链接,甚至根本不是指向页面的链接。例如,得到的链接如下:
mailto:example.example@exampl.com
我需要一些帮助来过滤链接,以便我只获得指向同一根/基本站点的新页面的链接。
【问题讨论】:
-
检查链接是否以域名开头:
link.startsWith("http://www.ics.uci.edu/") -
jsoup 中的 Element 对象没有像“startsWith”这样的方法,并且不以基本域(/pages.page2.html)开头的链接可能仍然在同一个站点上,只是使用js 导航。
-
获取
Element link对象的字符串url。并在url上调用startsWith。使用js进行导航的链接必须有共同的属性。您可以按它们过滤 -
使用
String absUrl = linkElement.attr("href"); if(absUrl.startsWith("http://www.ics.uci.edu/")){//this is url within your site} -
这解决了一些无法使用的链接,但我发现仍然有这种格式的链接可以指向文档或图像。例如:example.com/wp-content/gallery/despre-noi/3-2.jpg 或 example.com/wp-content/uploads/2015/05/17-HGR-890.pdf
标签: java html web-crawler jsoup anchor