日期:2014-05-18  浏览次数:20621 次

如何能得到网页所有的链接?
比如通过一个地址得到一个网页,然后得到网页中所有的链接地址,不知道程序该如何实现,有哪几种方式,最好是java程序实现,谢谢

------解决方案--------------------
用HtmlParser,我最近恰好在研究,写了一小段:

import org.htmlparser.Parser;
import org.htmlparser.filters.*;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.*;


public class TestParser {
public void getAllUrls(String url) {
NodeList nodeList = null;
try {
Parser p = new Parser(url);
p.setEncoding( "gb2312 ");
//nodeList = p.parse(new TagNameFilter( "A ")); // 使用TagNameFilter
nodeList = p.parse(new NodeClassFilter(LinkTag.class)); // 使用NodeClassFilter
} catch (ParserException e) {
e.printStackTrace();
}
if(nodeList != null && nodeList.size() > 0) {
for(int i = 0; i < nodeList.size(); i++) {
System.out.println(((LinkTag)nodeList.elementAt(i)).getLink()+ "\n "+((LinkTag)nodeList.elementAt(i)).getLinkText());
}
}
}

/**
* at param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestParser website= new TestParser();
website.getAllUrls( "http://www.fsonline.com.cn ");
}
}
------解决方案--------------------
推荐用正则
Pattern p2 = Pattern.compile( " <[aA] href=[\ " ']?([^\ " '> ]*)[\ " ']?> ");
String str = " <a href=\ "123.com\ "> ";
Matcher m = p2.matcher(str);
while (m.find()){
System.out.println(m.group(1));
}