jsoup解析HTML用法小结

转载自   jsoup解析HTML用法小结

使用HttpClient+jsoup做采集器有一段时间了,发现jsoup很好用,而且还有很多方便的东西都没怎么用上。于是想根据官网上的cookbook来对jsoup的使用做个小结,或者是归纳。按功能分类做个列表,方便在写程序的时候快速翻阅。

1、jsoup的HTML文档(Document)对象模型

  • Document对象由Element和TextNode对象组成
  • 继承链
    Document extends Element extends Node
    TextNode extends Node
  • Element包括一个子Node的列表及一个父Element

2、解析文档

  • 从字符串解析
    String html = "<html><head><title>First parse</title></head>" 
      + "<body><p>Parse HTML into a doc.</p></body></html>";
    Document doc = Jsoup.parse(html);
  • 从URL获取并解析
    Document doc = Jsoup.connect("http://example.com/").get();
    String title = doc.title();
    Document doc = Jsoup.connect("http://example.com")
      .data("query", "Java")
      .userAgent("Mozilla")
      .cookie("auth", "token")
      .timeout(3000)
      .post();
  • 从文件解析
    File input = new File("/tmp/input.html");
    Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

3、DOM方式遍历元素

搜索元素

  • getElementById(String id)
  • getElementByTag(String tag)
  • getElementByClass(String className)
  • getElementByAttribute(String key)
  • siblingElements()firstElementSibling()lastElementSibling()nextElementSibling(),previousElementSibling()
  • parent()children()child(int index)

获取元素数据

  • attr(String key) – 获取key属性
  • attributes() – 获取属性
  • id()className()classNames()
  • text() – 获取文本内容
  • html() – 获取元素内部HTML内容
  • outerHtml() – 获取包括此元素的HTML内容
  • data() – 获取<srcipt><style>标签中的内容
  • tag()tagName()

4、选择器语法(jsoup与其他解析器的区别就是可以使用类似jquery的选择器语法来搜索及过滤出所需的元素)

 基本选择器

  • tagname: 搜索tag标签的元素
  • ns|tag: 搜索命名空间内tag标签的元素,如fb|name<fb:name>
  • #id: 搜索有指定id的元素
  • .class: 搜索有指定class的元素
  • [attribute]: 搜索有attrribute属性的元素
  • [^attri]: 搜索有以attri开头的属性的元素
  • [attr=value]: 搜索有指定属性及其属性值的元素
  • [attr^=value][attr$=value][attr*=value]: 搜索有指定attr属性,且其属性值是以value开头、结尾或包括value的元素,如[href*=/path/]
  • [attr~=regex]: 搜索有指定attr属性,且其属性值符合regex正则表达式的元素
  • *: 搜索所有元素

选择器组合

  • el#id: 同时指定标签名称和id
  • el.class: 同时指定标签名称和class
  • el[attr]: 同时指定标签名称和及其中所含属性的名称
  • 上述3项的任意组合,如a[href].highlight
  • ancestor child: 包含,如div.content p,即搜索<div class=”content”>下含有<p>标签的元素
  • ancestor > child: 直接包含,如div.content > p,即搜索直属<div class="content">节点下的<p>标签元素;div.content > *,即搜索<div class="content">下的所有元素
  • siblingA + siblingB: 直接遍历,如div.head + div,即搜索<div class="head"><div>的元素,其中不再包含子元素
  • siblingA ~ siblingX: 遍历,如h1 ~ p,即<h1>下直接或间接有<p>的元素
  • el, el, el: 组合多个选择器,搜索满足其中一个选择器的元素

 伪选择器(条件选择器)

  • :lt(n): 搜索n号元素之前的元素
  • :gt(n): 搜索n号元素之后的元素
  • :eq(n): 搜索n号元素
  • :has(seletor): 搜索符合指定选择器的元素
  • :not(seletor): 搜索不符合指定选择器的元素
  • :contains(text): 搜索包含指定文本的元素,区分大小写
  • :containsOwn(text): 搜索直接指包含指定文本的元素
  • :matches(regex): 搜索符合指定正则表达式的元素
  • :matchesOwn(regex): 搜索本元素文本中符合指定正则表达式的元素
  • 注意:以上伪选择器的索引中,第一个元素位于索引0,第二个元素位于索引1,……

5、获取元素的属性、文本和HTML

  • 获取元素的属性值:Node.attr(String key)
  • 获取元素的文本,包括与其组合的子元素:Element.text()
  • 获取HTML:Element.html()Node.outerHtml()

6、操作URL

  • Element.attr("href") – 直接获取URL
  • Element.attr("abs:href")Element.absUrl("href") – 获取完整URL。如果HTML是从文件或字符串解析过来的,需要调用Jsoup.setBaseUri(String baseUri)来指定基URL,否则获取的完整URL只会是空字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现打印菱形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印菱形*/ public class Diamond {public static void main(String[] args) {int rows 0; //菱形的行数Scanner input new Scanner(System.in);System.out.print("请输入菱形行数&#xff1a;&qu…

计算机二级vf上机试题,2016年计算机二级《VF》上机题及答案

2016年计算机二级《VF》上机题及答案二、综合应用题11设计一个表单名和文件名均为“bd2”的表单&#xff0c;所有控件的属性必须在表单设计器的属性窗口中设置。表单的标题为“外币市值情况”。表单中有一个文本框、一个表格和两个命令按钮“查询”和“关闭”。运行表单时&…

微软HTTP API指南

微软发布了创建“RESTful” API的指南。Roy Fielding将这些与REST没有多大关系的API称为HTTP API。 许多组织都发布了创建面向Web的HTTP API的建议&#xff0c;甚至是白宫都发布了一份标准——“白宫Web API标准”。近日&#xff0c;微软公开了他们的“微软REST API指南2.3”&a…

谈谈Memcached与Redis

转载自 谈谈Memcached与Redis1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库&#xff0c;但是不支持数据的持久化&#xff0c;服务器关闭之后数据全部丢失…

使用Akka.net开发第一个分布式应用

既然这个系列的主题是”基于消息的架构模型演变“&#xff0c;少不了说说Actor模型。Akka.net是一个基于Actor模型的分布式框架。如果你对分布式应用还非常陌生&#xff0c;当别人在谈”分布式“、”云计算“等名词时你感到茫然&#xff0c;那么本篇文章将带你进行一次分布式开…

用计算机控制英文,计算机控制

摘要&#xff1a;Flexible Manufacturing Systems-An Integrated Approach to Automate Production Operations;Growth of LD steelmaking in India;H{sub}2 optimal computer control: polynomial toolbox;Implementation of a real-time target tracking behavior using vide…

JAXP操作xml

转载自 JAXP操作xmlDOM对象详解1&#xff0e;基本的DOM对象 DOM的基本对象有5个&#xff1a;Document&#xff0c;Node&#xff0c;NodeList&#xff0c;Element和Attr。下面就这些对象的功能和实现的方法作一个大致的介绍。 Document 对象代表了整个XML的文档&#xff0c;所…

Aaron Stannard谈Akka.NET 1.1

Akka.NET 1.1近日发布&#xff0c;带来新特性和性能提升。InfoQ采访了Akka.net维护者Aaron Stannard&#xff0c;了解更多有关Akka.Streams和Akka.Cluster的信息。Aaron还阐述了与Akka for JVM实现有关的路线图计划。 InfoQ&#xff1a;这个版本有什么突出的特性&#xff1f; A…

以计算机网络为中介的人际传播,以计算机为中介的人际传播理论范式

20世纪90年代以来&#xff0c;以计算机为中介的传播(Computer-Mediated Communication&#xff0c;CMC)成为人类越来越普遍的经验。新技术深刻而全面地影响着人际传播的模式&#xff0c;并成为人际关系建立、发展和维系过程中不可或缺的因素。对实践过程的观察和研究形成了人际…

简单使用JDOM解析XML

转载自 简单使用JDOM解析XML使用JDOM解析XML一、前言 JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果&#xff0c;2000年初&#xff0c;JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。 DOM适合于当今流行的各种语言&#xf…

打造自己的LinqProvider

LinqProvider简介 本篇假设读者对Expression Tree 和Linq是有一定了解的&#xff0c;不了解的可以先看上面介绍Linq两篇文章,补一下课。 首先我们来看一下LinQProvide是如何执行的&#xff1a; 简单说明一下&#xff1a;我们写的Linq查询表达式将会被编译为方法调用链&#xff…

计算机硬件统的构成,计算机硬件统的构成部件.ppt

计算机硬件统的构成部件计算机硬件系统的构成部件 5.1 计算机硬件系统组成 5.2 中央处理器(CPU) 5.3 存 储 系 统 5.4 指令系统 计算机系统的基本构成 计算机硬件系统 指令和程序 计算机的工作过程 微型机主机的逻辑结构 微型计算机概述 计算机的总线 微型机主机的物理构成 BIO…

Java数据库连接池--DBCP浅析

转载自 Java数据库连接池--DBCP浅析前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量&#xff0c;数据库服务器就需要为每次连接创建一次数据库连接…

使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

最新的Mono 4.4已经支持运行asp.net mvc5项目&#xff0c;有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目&#xff0c;然后部署到Mono上&#xff0c;浏览下发现一堆错误出现&#xff0c;心中一万只草泥马奔腾而来&#xff0c;这也叫支持吗&#x…

体质测试数据统计软件,[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制...

《[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制(3页珍藏版)》请在装配图网上搜索。1、体质测试数据excel自动统计表体质测试…

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

转载自 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源&#xff0c;这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性&#xff0c;影响到程序的性能指标…

分布式基础通信协议:paxos,totem和gossip

背景&#xff1a; 在分布式中&#xff0c;最难解决的一个问题就是多个节点间数据同步问题。为了解决这样的问题&#xff0c;涌现出了各种奇思妙想。只有在解决了如何进行信息同步的基础之上才衍生出形形色色的应用。这里开始介绍几种分布式通信协议。 简单即有效——totem协议:…

计算机专业可以评机械工程师,机械工程师个人评价

人就像一个多面体。仅仅由别人的评价来判定自己是不全面的&#xff0c;当自己也沉淀下来&#xff0c;窥探自己的内心&#xff0c;写下自己的自我评价&#xff0c;这样才可以不断进步。但是自我评价要怎么写呢?下面是学习啦小编带来机械工程师个人评价范文的内容&#xff0c;欢…

分布式系统之消息队列

转载自 分布式系统之消息队列 一、MQ简介 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 使用较多的消息队…

微软准备开源PowerShell

近日微软再次在向开源投出橄榄枝&#xff0c; PowerShell是面向Windows和Windows Server的自动化平台和脚本语言&#xff0c;帮助用户简化系统的管理。在纳德拉的带领下微软也逐渐走向开放&#xff0c;根据相关爆料称微软有计划在近期内 开源该脚本语言。 知名Windows爆料人士W…