📄 htmlparserextraction.java
字号:
package chapter9;
import org.htmlparser.util.*;
import org.htmlparser.Parser;
import org.htmlparser.filters.*;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.NodeFilter;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.lexer.*;
import org.htmlparser.lexer.Stream;
import org.htmlparser.Node;
import java.io.*;
import java.net.*;
import org.htmlparser.http.ConnectionManager;
import org.htmlparser.visitors.TextExtractingVisitor;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.filters.HasSiblingFilter;
import org.htmlparser.util.ParserException;
public class HtmlParserExtraction {
public static void main (String[] args) throws ParserException
{
try {
//ParseHtmlText("http://www.bnu.edu.cn/","GB2312");
//getHtmlUrls("http://www.bnu.edu.cn/","GB2312");
//getBaiduUrls("http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=Lucene&pn=0&ver=0&cl=3","GB2312");
getLexerUrls("http://www.bnu.edu.cn/","GB2312");
} catch(ParserException e)
{
e.printStackTrace();
}
}
public static void getLexerUrls(String url , String pageEncoding) throws ParserException
{
Node node = null;
Lexer lexer = null;
try {
ConnectionManager connmgr;
connmgr = Page.getConnectionManager(); // 生成链接管理器
lexer = new Lexer(connmgr.openConnection(url)); // 生成分析器
lexer.getPage().setEncoding(pageEncoding); // 设置网页编码
node = lexer.nextNode();
while(node != null ) { // 循环遍历每个节点
System.out.println(node.toString());
node = lexer.nextNode();
}
} catch (ParserException e) {
e.printStackTrace();
}
}
public static void getHtmlUrls(String url , String pageEncoding) throws ParserException
{
NodeList nodeList = null;
try {
Parser parser = new Parser(url);
parser.setEncoding(pageEncoding); // 设置解析编码格式
// 可以使用下面filter来取出url连接
//nodeList = parser.parse(new TagNameFilter("A")); // 使用TagNameFilter
nodeList = parser.parse(new NodeClassFilter(LinkTag.class)); // 使用NodeClassFilter
} catch (ParserException e) {
e.printStackTrace();
}
if(nodeList != null && nodeList.size() > 0) { // 循环遍历每个Url节点
for(int i = 0; i < nodeList.size(); i ++) {
String urlLink = ((LinkTag)nodeList.elementAt(i)).extractLink();
String LinkName = ((LinkTag)nodeList.elementAt(i)).getLinkText();
if( urlLink.indexOf("bnu") == 0 || urlLink.indexOf("http") == 0 )
//System.out.println(LinkName +" : "+ urlLink);
System.out.println( urlLink );
}
}
}
public static void getBaiduUrls(String url , String pageEncoding) throws ParserException
{
NodeList nodeList = null;
try {
Parser parser = new Parser(url);
parser.setEncoding(pageEncoding); // 设置解析编码格式
// Baidu 检索结果的url连接和标题
nodeList = parser.parse( new AndFilter( new HasAttributeFilter("target") ,
new HasAttributeFilter("onclick")));
} catch (ParserException e) {
e.printStackTrace();
}
if(nodeList != null && nodeList.size() > 0) { // 循环遍历每个Url节点
for(int i = 0; i < nodeList.size(); i ++) {
String urlLink = ((LinkTag)nodeList.elementAt(i)).extractLink();
String LinkName = ((LinkTag)nodeList.elementAt(i)).getLinkText();
if( urlLink.indexOf("bnu") == 0 || urlLink.indexOf("http") == 0 )
System.out.println("结果 "+ i +" 标题:"+LinkName);
System.out.println(" 链接:"+urlLink );
}
}
}
public static void ParseHtmlText(String url,String pageEncoding) throws ParserException
{
Parser parser = new Parser(url); // 访问目标网站
parser.setEncoding(pageEncoding); // 设置解析编码格式
TextExtractingVisitor visitor = new TextExtractingVisitor (); // 生成文本内容抽取对象
NodeFilter textFilter = new NodeClassFilter(TextNode.class); // 生成文本过滤器
NodeList nodes = parser.extractAllNodesThatMatch(textFilter); // 利用文本过滤器解析文档
for (int i = 0; i < nodes.size(); i++)
{
TextNode textnode = (TextNode) nodes.elementAt(i); // 获取文本节点
String line = textnode.toPlainTextString().trim(); // 转换成纯文本
if (line.equals("")) continue;
System.out.println(line);
}
parser.visitAllNodesWith (visitor); // 访问网页所有节点
System.out.println(visitor.getExtractedText()); // 输出网页正文
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -