网络爬虫HtmlParserTool源码

//java中有一个非常实用的工具包HtmlParser.
//他专门针对Html页面进行处理,不仅能提取URL,还能提取文本以及你想要的任何内容。
package url;


import java.util.HashSet;
import java.util.Set;


import javax.swing.text.html.parser.Parser;


import org.w3c.dom.Node;
import org.w3c.dom.traversal.NodeFilter;










public class HtmlParserTool {
//获取一个网站上的链接,filter用来过滤链接
public static Set<String> extracLinks(String url, LinkFilter filter){
Set<String> links = new HashSet<String>();
try{
//参数是自己定义的网页url
Parser parser = new Parser(url);
parser.setEncoding("gb2312");
//过滤<frame> 标签的filter,用来提取frame标签里的src属性
NodeFilter frameFilter  = new NodeFilter(){
if(node.getText().startsWith("frame src=")){
return true;
}else{
return false;
}

};
//OrFilter 来实现过滤<a>标签和<frame>标签
OrFilter linkFilter = new OrFilter(new NodeClassFilter(LinkTag.class), 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
if(filter.accept(linkUrl))
links.add(linkURL);
}else //<frame>标签
{
//提取frame里的src属性的链接,如<frame src = "test.html"/>
String frame = tag.getTextContent();
int start = frame.indexOf("src =");
frame = frame.substring(start);
int end = frame.indexOf(" ");
if(end == -1)
end = frame.indexOf(">");
String frameUrl = frame.substring(5, end - 1);
if(filter.accept(frameUrl))
links.add(frameUrl);
}
}
}catch(ParserException e)
{
e.printStackTrace();

}
return links;
}
}

你可能感兴趣的:(网络爬虫HtmlParserTool源码)