JAVA解析HTML

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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);
   }
}
目录
相关文章
|
12天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
42 2
|
16天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
66 6
|
3天前
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。
|
8天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
8天前
|
Java 测试技术 API
Java 反射机制:深入解析与应用实践
《Java反射机制:深入解析与应用实践》全面解析Java反射API,探讨其内部运作原理、应用场景及最佳实践,帮助开发者掌握利用反射增强程序灵活性与可扩展性的技巧。
|
13天前
|
存储 算法 Java
Java Set深度解析:为何它能成为“无重复”的代名词?
Java的集合框架中,Set接口以其“无重复”特性著称。本文解析了Set的实现原理,包括HashSet和TreeSet的不同数据结构和算法,以及如何通过示例代码实现最佳实践。选择合适的Set实现类和正确实现自定义对象的hashCode()和equals()方法是关键。
25 4
|
16天前
|
Java 编译器 数据库连接
Java中的异常处理机制深度解析####
本文深入探讨了Java编程语言中异常处理机制的核心原理、类型及其最佳实践,旨在帮助开发者更好地理解和应用这一关键特性。通过实例分析,揭示了try-catch-finally结构的重要性,以及如何利用自定义异常提升代码的健壮性和可读性。文章还讨论了异常处理在大型项目中的最佳实践,为提高软件质量提供指导。 ####
|
20天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
40 2
|
20天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
18 0
|
Java
Java HTTP请求 如何获取并解析返回的HTML内容
在Java开发中,经常会遇到需要获取网页内容的情况。而HTTP请求是实现这一目标的常用方法之一。本文将介绍如何使用Java进行HTTP请求,并解析返回的HTML内容。
487 0

推荐镜像

更多
下一篇
无影云桌面