`
wnzz95391511
  • 浏览: 124606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HtmlParser提取网页中的纯文本信息

阅读更多
    HTMLParser 一个解析web页面的开源类库。
   
    准备学习下搜索方面的技术,就学习了些网络爬虫的知识。最近一直在一个点上困惑,如何提取一个网页上的纯文本信息。要使用正则表达式的话呢,需要考虑很多因素,而且标签也太多,不是很方便,效果也不好。就准备利用开源包,最后选择了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();
	}


便可以解析出网页中的纯文本信息,而且效果很好
ps:太不会搜索信息了,API中就有这样的方法,都没找到。
4
1
分享到:
评论
2 楼 xiaopei0714 2011-11-09  
可是我提取出的文本包含一堆的问号,可以设置编码吗?
1 楼 it_weigang 2011-01-24  
请教问题,如果是ajax的页面,信息如何抓取呢?例如 http://app.abchina.com/branch/  中的营业机构网点信息。

相关推荐

Global site tag (gtag.js) - Google Analytics