日期:2014-05-17 浏览次数:20782 次
// 获取一个网页上所有的链接和图片链接
public
static void extracLinks(String url) {
try {
Parser
parser = new Parser(url);
parser.setEncoding("gb2312");
//过滤
<frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接
NodeFilter frameFilter = new NodeFilter() {
public boolean
accept(Node node) {
if (node.getText().startsWith("frame
src=")) {
return true;
} else {
return false;
}
}
};
//OrFilter
来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系
OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new
NodeClassFilter(ImageTag.class));
OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
//得到所有
经过过滤的标签
NodeList list =
parser.extractAllNodesThatMatch(linkFilter);
for (int i = 0; i <
list.size(); i++) {
Node tag = list.elementAt(i);
if (tag
instanceof LinkTag)//<a> 标签
{
LinkTag link =
(LinkTag) tag;
String linkUrl = link.getLink();//url
String text = link.getLinkText();//链接文字
System.out.println(linkUrl + "**********" + text);
}
else
if (tag instanceof ImageTag)//<img> 标签
{
ImageTag
image = (ImageTag) list.elementAt(i);
System.out.print(image.getImageURL() + "********");//图片地址
System.out.println(image.getText());//图片文字
}
else//<frame> 标签
{
//提取 frame 里 src 属性的链接如 <frame
src="test.html"/>
String frame = tag.getText();
int
start = frame.indexOf("src=");
frame = frame.substring(start);
int end = frame.indexOf(" ");
if (end == -1)
end = frame.indexOf(">");
frame = frame.substring(5, end -
1);
System.out.println(frame);
}
}
} catch
(ParserException e) {
e.printStackTrace();
}
}