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);
   }
}
AI 代码解读

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);
   }
}
AI 代码解读
目录
打赏
0
0
0
0
33
分享
相关文章
|
14天前
|
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
35 0
重学Java基础篇—ThreadLocal深度解析与最佳实践
ThreadLocal 是一种实现线程隔离的机制,为每个线程创建独立变量副本,适用于数据库连接管理、用户会话信息存储等场景。
45 5
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
33 5
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
35 2
|
14天前
|
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
23 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
28天前
|
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
48 5
Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
294 0
Java 技术篇 - 从指定的web网页页面中读取html内容实例演示,从http协议下的url地址中读取web页面内容方法
|
2月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
173 60
【Java并发】【线程池】带你从0-1入门线程池
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
73 23

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等