【发布时间】:2015-05-30 04:29:46
【问题描述】:
我正在尝试获取网站中的链接,并将它们放在List 上,但我经常在没有根站点的情况下获得不完整的链接。例如,我得到类似 /thing.html/ 而不是 http://website.com/thing.html/
它是一个搜索引擎,所以我也需要解析网站的链接,我需要完整的链接才能做到这一点。
我也不允许使用任何第三方库,例如 JSoup,这就是我使用 javax.swing.text.html 来做到这一点的原因。
我认为您可以使用 Jsoup 执行 anchor.attr("abs:href") 之类的操作,这与我在这里需要的相同。
这是我目前的代码:
import java.util.List;
import java.util.ArrayList;
import java.net.*;
import java.io.*;
import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.html.HTML.Attribute;
import javax.swing.text.MutableAttributeSet;
public class PARSER {
public static List<String> getLinks(BufferedReader BuffRead) throws IOException {
final ArrayList<String> list = new ArrayList();
ParserDelegator parserDelegator = new ParserDelegator();
ParserCallback parserCallback = new ParserCallback() {
public void handleText(final char[] data, final int pos) { }
public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) {
if (tag == Tag.A) {
String address = (String) attribute.getAttribute(Attribute.HREF);
//This is where I get the HREF "links"
list.add(address);
}
}
public void handleEndTag(Tag t, final int pos) { }
public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
public void handleComment(final char[] data, final int pos) { }
public void handleError(final java.lang.String errMsg, final int pos) { }
};
parserDelegator.parse(BuffRead, parserCallback, false);
return list;
}
【问题讨论】:
标签: java html swing parsing href