`
cfan_haifeng
  • 浏览: 120068 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

htmlparser解析html分页

阅读更多

       在编写cms内容标签时有这样一种情况:

 

      1.数据中内容字段存储结构如下

 

 
  <div>我是<b>第1页 </b>啊</div>
  <div class="page">1</div>

  <div>我是<b>第2页</b>啊</div>
  <div class="page">2</div>

  <div>我是<b>第3页</b>啊</div>
  <div class="page">3</div>

  <div>我是<b>第4页</b>啊</div>
  <div class="page">4</div>
  
  

    2.其中 <div class="page">1,2,3,</div>是分页标签。要做到就是根据这个分页标签实现分页,即把 <div>我是<b>第1页 </b>啊</div> 给提取出来。输出结果如下:

 

 

取第1页: <div>我是<b>第1页</b>啊</div>
取第2页: <div>我是<b>第2页</b>啊</div>
取第3页: <div>我是<b>第3页</b>啊</div>
取第4页: <div>我是<b>第4页</b>啊</div>
 

 

 

    java代码如下:  

 

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class PageTagParser {
	/**
	 * @param args
	 * @throws ParserException
	 */
	public static void main(String[] args) throws ParserException {

		String fileName = "E:/workspace/Test_htmlparser/res/test.html";
		// fileName =
		// "E:/workspace/Test_htmlparser/res/test_un_page_tag.html";//没分页标签
		String inputHTML = readFileByLines(fileName);
		// System.out.println("inputHTML:" + inputHTML);

		PageTagParser p = new PageTagParser(inputHTML);
		p.parserInputHTMLByPageTag();// 分析
		for (int currPageNum = 1; currPageNum <= p.getSumPageSize(); currPageNum++) {
			System.out.println("取第" + currPageNum + "页:"
					+ p.getContentByCurrPageNum(currPageNum));

		}

		//
	}

	private Node[] nodes;
	private int sumPageSize;
	private String inputHTML;

	/**
	 * 获取总页数
	 * 
	 * @return
	 */
	public int getSumPageSize() {
		return sumPageSize;
	}

	/**
	 * 根据分页标签分析HTML
	 * 
	 * @param inputHTML
	 * @param currPageNum
	 * @throws ParserException
	 */
	public void parserInputHTMLByPageTag() throws ParserException {
		Parser parser;
		NodeFilter filter;

		parser = new Parser();
		NodeFilter filterTag = new TagNameFilter("div");
		NodeFilter filterAttribute = new HasAttributeFilter("class", "page");

		filter = new AndFilter(new NodeFilter[] { filterTag, filterAttribute });

		// parser.setResource("http://www.baidu.com");
		// parser.setResource("E:/workspace/Test_htmlparser/res/test.html");
		parser.setInputHTML(inputHTML);

		NodeList nodeList = parser.parse(filter);
		nodes = nodeList.toNodeArray();

		// System.out.println(parser.parse(filter));

		// System.out.println("nodes.length:" + nodes.length);
		// System.out.println(nodes[0]);

		if (null == nodes || 0 == nodes.length) {
			sumPageSize = 1;
		} else {
			sumPageSize = nodes.length;
		}

	}

	/**
	 * 根据页面获取页面
	 * 
	 * @param currPageNum
	 * @return
	 */
	public String getContentByCurrPageNum(int currPageNum) {

		// System.out.println(parser.parse(filter));

		// System.out.println("nodes.length:" + nodes.length);
		// System.out.println(nodes[0]);

		if (null == nodes || 0 == nodes.length) {
			System.out.println("没有分页标签!");
			return inputHTML;
		} else if (1 >= currPageNum) {// 取第一页
			// System.out.println("取第一页!");
			return inputHTML.substring(0, nodes[0].getStartPosition());
		} else {

			// beginIndex这一点写的有点龌龊了,getEndPosition()返回的是<div>的后面位置不是</div>的后面位置,小郁闷
			Node beginNode = nodes[currPageNum - 2];
			int beginIndex = beginNode.getStartPosition()
					+ beginNode.toHtml().length();

			return inputHTML.substring(beginIndex, nodes[currPageNum - 1]
					.getStartPosition());
		}

		// System.out.println());
		// return inputHTML;
	}

	public PageTagParser(String inputHTML) {
		super();
		this.inputHTML = inputHTML;
	}

	/**
	 * 读取文件(非重点)
	 */
	public static String readFileByLines(String fileName) {
		File file = new File(fileName);
		StringBuilder sb = new StringBuilder();
		BufferedReader reader = null;
		try {
			// System.out.println("以行为单位读取文件内容,一次读一整行:");
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			int line = 1;
			// 一次读入一行,直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				// 显示行号
				// System.out.println("line " + line + ": " + tempString);
				sb.append(tempString);
				line++;
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
			return sb.toString();
		}
	}
}
 

 

呵呵,简单的就这么完成了,没缓存之类的……

 

分享到:
评论

相关推荐

    自己动手写搜索引擎(罗刚著).doc

    4.1.1 HtmlParser介绍 51 4.1.2 结构化信息提取 54 4.1.3 网页去噪 60 4.1.4 网页结构相似度计算 63 4.1.5 正文提取的工具FireBug 64 4.1.6 正文提取的工具NekoHTML 66 4.1.7 正文提取 68 4.2 从非HTML文件中提取...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

Global site tag (gtag.js) - Google Analytics