from:http://perfectlife.javaeye.com/blog/366084
HtmlParser提取网页中的纯文本信息
文章分类:Java编程 关键字: 如何使用htmlparser提取网页中的纯文本信息
HTMLParser 一个解析web页面的开源类库。
准备学习下搜索方面的技术,就学习了些网络爬虫的知识。最近一直在一个点上困惑,如何提取一个网页上的纯文本信息。要使用正则表达式的话呢,需要考虑很多因素,而且标签也太多,不是很方便,效果也不好。就准备利用开源包,最后选择了HtmlParser。
在网上搜索如何利用HtmlParser提取页面信息。提取的结果都不是很理想,都包含了很多无用空格信息,还有很多JS代码。
如利用如下的代码:
就包含了很多的空格信息以及JS代码。
后来在HTMLParser的API中的org.htmlparser.beans.StringBean类的描述中找到如下一段文字:
利用后,如下:
准备学习下搜索方面的技术,就学习了些网络爬虫的知识。最近一直在一个点上困惑,如何提取一个网页上的纯文本信息。要使用正则表达式的话呢,需要考虑很多因素,而且标签也太多,不是很方便,效果也不好。就准备利用开源包,最后选择了HtmlParser。
在网上搜索如何利用HtmlParser提取页面信息。提取的结果都不是很理想,都包含了很多无用空格信息,还有很多JS代码。
如利用如下的代码:
- public void getWebPageContent(String htmlContent) {
- Parser parser = new Parser();
- try {
- parser.setInputHTML(htmlContent);
- parser.setEncoding(parser.getURL());
- HtmlPage page = new HtmlPage(parser);
- parser.visitAllNodesWith(page);
- logger.info(page.getTitle());
- NodeList list = page.getBody();
- StringBuffer sb = new StringBuffer();
- for (NodeIterator iterator = list.elements(); iterator
- .hasMoreNodes();) {
- Node node = iterator.nextNode();
- logger.info(node.toPlainTextString());
- } catch (ParserException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
就包含了很多的空格信息以及JS代码。
后来在HTMLParser的API中的org.htmlparser.beans.StringBean类的描述中找到如下一段文字:
- Extract strings from a URL.
- Text within <SCRIPT></SCRIPT> tags is removed.
- The text within <PRE></PRE> tags is not altered.
- The property Strings, which is the output property is null until a URL is set. So a typical usage is:
- StringBean sb = new StringBean ();
- sb.setLinks (false);
- sb.setReplaceNonBreakingSpaces (true);
- sb.setCollapse (true);
- sb.setURL ("http://www.netbeans.org"); // the HTTP is performed here
- String s = sb.getStrings ();
利用后,如下:
- /**
- * 根据提供的URL,获取此URL对应网页的纯文本信息
- * @param url 提供的URL链接
- * @return RL对应网页的纯文本信息
- * @throws ParserException
- */
- public String getText(String url)throws ParserException{
- StringBean sb = new StringBean();
- //设置不需要得到页面所包含的链接信息
- sb.setLinks(false);
- //设置将不间断空格由正规空格所替代
- sb.setReplaceNonBreakingSpaces(true);
- //设置将一序列空格由一个单一空格所代替
- sb.setCollapse(true);
- //传入要解析的URL
- sb.setURL(url);
- //返回解析后的网页纯文本信息
- return sb.getStrings();
- }