本次测试为从利用htmlparser来提取百度搜索结果。
1.引入jar包(百度能找到)
2.package com.wzxy.SearchEngines.Util;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.LinkStringFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.RegexFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import com.wzxy.SearchEngines.Model.Datas;
public class HtmlFileParser {
//获取子链接,url为网页url,filter是链接过滤器,返回该页面子链接的HashSet
public static List<Datas> extracLinks(String url, LinkStringFilter filter) {
Set<String> links = new HashSet<String>();
List<String> titile = new ArrayList();
List<Datas> content = new ArrayList();
try {
Parser parser = new Parser(url);
parser.setEncoding("utf-8");
//获取内容的过滤器
NodeFilter contentFilter = new NodeFilter() {
public boolean accept(Node node) {
if(node.getText().indexOf("class=\"result c-container")>0) //获取这个开头的节点
{
return true;
} else {
return false;
}
}
};
//获取页码的过滤器
NodeFilter pageFilter = new NodeFilter() {
public boolean accept(Node node) {
if(node.getText().indexOf("p id=\"page")>0)//获取这个开头的节点
{
return true;
} else {
return false;
}
}
};
NodeList list = parser.extractAllNodesThatMatch(contentFilter);
for (int i = 0; i < list.size(); i++) {//遍历节点
Node tag = list.elementAt(i);
titile.add(tag.toHtml());
Datas da = new Datas();
Node n = tag.getFirstChild();
Node n2 = (tag.getChildren().toNodeArray())[1];
System.out.println("title的内容"+n.toHtml());
da.title=n.toHtml();
System.out.println("content的内容"+n2.toHtml());
da.detail=n2.toHtml();
content.add(da);
}
System.out.println("拿到的列表的数量是:"+content.size());
/*
NodeList page = parser.extractAllNodesThatMatch(pageFilter);
for (int i = 0; i < page.size(); i++) {
Node tag = list.elementAt(i);
// titile.add(tag.toHtml());
System.out.println("page的内容"+tag.toHtml());
}*/
} catch (ParserException e) {//捕捉parser的异常
e.printStackTrace();
}
return content;
}
}