JAVA解析HTML

简介:

htmlparser

htmlparser是一个纯的java写的html(标准通用标记语言下的一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或
提取html。
无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。

示例代码:

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

/**
 * 封装的HtmlParser实现的解析器
 * 
 * @author jianggujin
 * 
 */
public class HQHtmlParser
{
   /** 解析器 **/
   private Parser parser = null;
   /** 重置 **/
   private boolean needReset = false;

   /**
    * 构造方法
    * 
    * @param resource
    * @throws ParserException
    */
   public HQHtmlParser(String resource) throws ParserException
   {
      parser = new Parser(resource);
   }

   /**
    * 重置
    */
   private void reset()
   {
      if (needReset)
      {
         parser.reset();
      }
      needReset = true;
   }

   /**
    * 通过id获得元素
    * 
    * @param id
    * @return
    * @throws ParserException
    */
   public Node getElementById(String id) throws ParserException
   {
      reset();
      NodeFilter filter = new HasAttributeFilter("id", id);
      NodeList nodes = parser.extractAllNodesThatMatch(filter);
      return nodes != null && nodes.size() > 0 ? nodes.elementAt(0) : null;
   }

   /**
    * 通过一组id获得元素
    * 
    * @param ids
    * @return
    * @throws ParserException
    */
   public NodeList getElementByIds(String... ids) throws ParserException
   {
      reset();
      NodeFilter[] predicates = new HasAttributeFilter[ids.length];
      for (int i = 0; i < predicates.length; i++)
      {
         predicates[i] = new HasAttributeFilter("id", ids[i]);
      }
      NodeFilter filter = new OrFilter(predicates);
      return parser.extractAllNodesThatMatch(filter);
   }

   /**
    * 通过标签名称获得元素
    * 
    * @param name
    * @return
    * @throws ParserException
    */
   public NodeList getElementsByTagName(String name) throws ParserException
   {
      reset();
      NodeFilter filter = new TagNameFilter(name);
      return parser.extractAllNodesThatMatch(filter);
   }

   /**
    * 通过样式获得元素
    * 
    * @param name
    * @return
    * @throws ParserException
    */
   public NodeList getElementsByCSS(String selector) throws ParserException
   {
      reset();
      NodeFilter filter = new CssSelectorNodeFilter(selector);
      return parser.extractAllNodesThatMatch(filter);
   }

   /**
    * 通过过滤器获得元素
    * 
    * @param filter
    * @return
    * @throws ParserException
    */
   public NodeList getElementsByFilter(NodeFilter filter)
         throws ParserException
   {
      reset();
      return parser.extractAllNodesThatMatch(filter);
   }
}

jsoup

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

示例代码:

import java.util.ArrayList;
import java.util.List;

import org.htmlparser.util.ParserException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 封装的Jsoup实现的解析器
 * 
 * @author jianggujin
 * 
 */
public class HQJSoup
{
   private Document document = null;

   /**
    * 构造方法
    * 
    * @param resource
    * @throws ParserException
    */
   public HQJSoup(String resource) throws ParserException
   {
      // Jsoup还有其他构造方法
      document = Jsoup.parse(resource);
   }

   /**
    * 通过id获得元素
    * 
    * @param id
    * @return
    */
   public Element getElementById(String id)
   {
      return document.getElementById(id);
   }

   /**
    * 通过一组id获得元素
    * 
    * @param ids
    * @return
    */
   public List<Element> getElementByIds(String... ids) throws ParserException
   {
      List<Element> elements = new ArrayList<Element>(ids.length);
      for (String id : ids)
      {
         elements.add(getElementById(id));
      }
      return elements;
   }

   /**
    * 通过标签名称获得元素
    * 
    * @param name
    * @return
    */
   public Elements getElementsByTagName(String name)
   {
      return document.getElementsByTag(name);
   }
}
目录
相关文章
|
7月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1752 0
|
7月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
7月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
563 100
|
8月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
8月前
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
409 0
|
7月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
342 19
|
6月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
7月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
6月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
7月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1257 1

热门文章

最新文章

推荐镜像

更多
  • DNS