`
cfan_haifeng
  • 浏览: 122382 次
  • 性别: 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();
		}
	}
}
 

 

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

 

分享到:
评论

相关推荐

    HtmlParser 实现简易爬虫

    HTMLParser是一个Java库,用于解析HTML文档,提取和处理数据,这对于构建简易爬虫非常有用。在本场景中,我们讨论如何使用HTMLParser库来创建一个基础的网络爬虫,以便从网页上抓取和分析数据。 首先,我们需要了解...

    Java使用HtmlParser实现简单的网络爬虫

    这里我们使用了HtmlParser库,它是一个开源的Java库,专门用于解析HTML文档,提取和处理网页上的信息。以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析...

    java利用htmlparser抓取网页数据

    HTMLParser是Java的一个开源库,专门用于解析HTML文档,提取其中的数据。它的设计目标是简化HTML解析过程,即使面对不规范的HTML代码也能有效地处理。通过使用HTMLParser,开发者可以方便地遍历HTML元素,获取所需...

    解析HTML数据

    本教程将深入探讨如何使用jsoup解析HTML文档,以榕树下网站为例,展示其在实际应用中的具体步骤。 首先,我们需要了解jsoup的基本用法。安装jsoup非常简单,通常通过Maven或Gradle将其添加为项目的依赖。在Java代码...

    维基百科api调用实例

    3. **HTMLParser解析** `htmlparser`库是Java中的一个HTML解析器,可以帮助我们从HTML响应中提取所需数据。在获取到维基百科API的JSON响应后,需要将其转换为JSON对象,然后使用`htmlparser`解析提取的数据。例如,...

    基于Java HttpClient和Htmlparser实现网络爬虫代码

    HttpClient 提供了与 HTTP 协议交互的能力,而 Htmlparser 则是用来解析 HTML 文档的工具。在本文中,我们将详细探讨如何利用这两个库来实现一个简单的网络爬虫。 首先,你需要在开发环境中配置好所需的库。对于 ...

    Python爬虫获取小说信息(带实验报告)

    在实验报告中,你会详细学习如何编写这样的爬虫程序,包括如何构造请求、解析HTML、处理异常以及存储爬取到的数据。同时,你也应该了解和遵守网络爬虫的道德规范,尊重网站的robots.txt文件,避免对服务器造成过大...

    爬虫Demo实例

    总之,【爬虫Demo实例】是一个综合性的学习资源,涵盖了从发送HTTP请求、解析HTML、数据提取到处理反爬策略等多个环节。通过这个实例,你将深入理解C#在构建网络爬虫中的应用,为后续的Web抓取项目打下坚实基础。...

    自己动手写搜索引擎

    - HTMLParser是一种解析HTML文档的工具。书中详细阐述了如何使用HTMLParser从网页中提取有用的信息,并将其转化为可被搜索引擎索引的形式。 #### 十一、DWR - Direct Web Remoting (DWR) 是一种简化Ajax编程的技术...

    常用的jar包简单介绍

    18. **htmlparser.jar**: 解析HTML文档的库,可用于提取和处理HTML内容。 19. **jakarta-oro.jar**: 提供文本处理功能,如正则表达式匹配、替换等。 20. **jaxen-1.1-beta-7.jar**: 与dom4j配合,用于XML文档的...

    cms需求分析

    - **HtmlParser**:用于解析HTML文档,提取所需信息。 #### 三、功能模块 CMS系统大致可以分为三个主要组成部分:门户网站、会员自服务系统及后台管理系统。 ##### 1. 门户网站 面向终端用户的界面,提供了多种...

    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 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics