如何使用Java搜索网站的断开链接?
我想扫描一些网站寻找断开的链接,最好使用Java。有什么提示吗?我该怎么做如何使用Java搜索网站的断开链接?,java,web-crawler,broken-links,Java,Web Crawler,Broken Links,我想扫描一些网站寻找断开的链接,最好使用Java。有什么提示吗?我该怎么做 (我知道有些网站可以这样做,但我想制作自己的个性化日志文件)编写一个递归检查链接的函数。 伪代码: function checklinks(String url){ try{ content=HTTP.getContents(url); String[] links=content.getAllRegexMatches('href="(http://.*?)"');
(我知道有些网站可以这样做,但我想制作自己的个性化日志文件)编写一个递归检查链接的函数。 伪代码:
function checklinks(String url){
try{
content=HTTP.getContents(url);
String[] links=content.getAllRegexMatches('href="(http://.*?)"');
foreach(links as String link)
checklinks(link)
} catch (Exception e) {
System.out.println("Link "+url" failed");
}
}
根据链接的不同,您必须通过添加相对于当前url的url来完成传递到下一个递归的链接
标记,获取其内容并尝试连接到它李>
如有必要,如果
中的URL属于您的站点,请递归重复此操作。确保在地图中存储您已经处理过的URL,这样您就不会不止一次了。编写web爬虫程序并不像读取静态HTML那么简单,如果页面使用JavaScript修改DOM,那么它会变得复杂。你还需要寻找你已经访问过的网页,也就是蜘蛛陷阱?如果网站是纯静态HTML,那么就去吧。。。但是如果站点使用Jquery并且很大,那么它可能会很复杂
如果你的站点都是静态的,很小,没有JS或者JS很少,那么使用已经列出的答案
或
您可以使用404的crawl.log,然后在以后对其进行解析
或者如果你自己写的最多:
您可以使用类似的东西(它有一个JavaScript引擎)来加载页面,然后查询DOM对象中的链接。然后将每个链接放置在“未访问”队列中,然后从未访问队列中提取链接以获取要加载的下一个url,如果页面未能加载,请报告它
为了避免重复页面(蜘蛛陷阱),您可以散列每个链接并保留一个访问页面的哈希表(请参阅)。在将链接放入未访问队列之前,请对照已访问的哈希表进行检查
要避免离开您的站点,请在将URL添加到未访问队列之前检查URL是否位于安全域列表中。如果要确认域外链接正常,请将它们保留在域外队列中。然后稍后使用URL.getContent(URL)加载此队列中的每个链接,以查看它们是否有效(比使用HTMLUnit更快,而且您无需解析页面)。
foreach(链接作为字符串链接)
他们什么时候把它添加到Java中的?还要确保如果有外部链接,你不会处理整个internet。@Alex,这是从伪Java 1开始添加的。0@OscarRyz似乎他们也在那里添加了函数
。。。还是1.2版?这些网站是否使用AJAX?您可以使用HttpURLConnection
类和JTidy
下载/解析整个(X)HTML代码,但对于动态AJAX网站来说并不是那么简单。对于这种情况,您可以查看SeleniumJavaAPI。