【发布时间】:2013-01-03 11:45:45
【问题描述】:
我正在使用crawler4j 抓取一些 HTML 文件,并且我想用自定义链接替换这些页面中的所有链接。目前,我可以使用此代码获取源 HTML 和所有传出链接的列表:
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String html = htmlParseData.getHtml();
List<WebURL> links = htmlParseData.getOutgoingUrls();
然而,一个简单的foreach 循环和搜索和替换不会让我得到我想要的。问题是WebURL.getURL(); 会返回绝对 URL,但有时链接是相对的,有时不是。
我想处理所有链接(图片、URL、JavaScript 文件等)。例如我想用view.php?url=http://www.domain.com/images/img.gif替换images/img.gif。
我想到的唯一解决方案是使用有点复杂的Regex,但恐怕我会错过一些罕见的情况。这已经完成了吗?是否有图书馆或一些工具可以实现这一目标?
【问题讨论】:
-
似乎没有这样的工具或库,但是正则表达式是一个强大的工具,迟早你将不得不学习如何使用它。我建议您立即尝试使用它。您可能还需要为此编写一些单元测试。
-
你试过我的答案了吗?因为我遇到过像你这样的问题,我使用这个正则表达式
-
@GavinXiong 实际上,我对正则表达式非常熟悉。我已经完成了可以在强大的正则表达式的帮助下修改 c++ 源代码的工具。但是,正如我在下面的评论中提到的那样,可能存在某些情况,例如格式错误的 HTML 会导致问题。
-
@AlirezaNoori 我看不出在 HTML 格式错误的情况下你能做什么......一旦解析器完成了它的工作,那么你所能做的就是处理结果。那么你真的需要修改所有的链接吗?可能有指向 javascript、iframe 源、嵌入式 boject 源等的链接。你在哪里画线?
-
@Lirik 不是全部,大部分链接。例如,我不想替换电子邮件链接等。至于第一部分,我正在寻找解析器,而不是正则表达式。而且因为 crawler4j 已经有了,我可能不得不修改它的代码。但是,如果提供的话,我宁愿使用更好的解决方案。
标签: java html web-crawler crawler4j