`
songxh2
  • 浏览: 132528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

网站集群系统—采集器技术实现之语法介绍

阅读更多

赛灵通网站集群系统内容自动采集器的采用了最新的jquery选择器语法,摒弃了过去采用一般人难以掌握的regexp表达式的单一方式,而采用一般网页设计人员就能知晓css的jquery选择表达式来定位网页中的元素的方法,这种方法简单灵活并且非常精确,大大简化了采集器最难编制的采集代码的难度。

 

     例如采集某网页中某个新闻板块的新闻超级链接,而不是全部链接,首先需要根据html内容特征定位到这些链接,其html代码如下:

     <div class="lanmu1">

          <a href="...">文章1</a><br>

          <a href="...">文章2</a>

          ...

     </div>

     则提取页面指定栏目链接文章的表达式为:.lanmu1 a

 

     例如说采集文章标题,页面的标题html编码是<div id="doctitle">文章标题例子</div>,提取页面标题的表达式则为:#doctitle

 

     采集语法中,不仅可以使用juqery语法,而且也同时支持传统regexp表达式,并且可以实现更加复杂的regexp替换表达式。例如:时间提取并转换的表达式:regex:{(\d{4})年(\d{1,2})月(\d{1,2})日\s(\d{1,2}:\d{1,2})}/{$1-$2-$3 $4}

    jquery是当今最流行的javascript基础类库,其简洁、灵活、跨浏览器的操作语法被当作web2.0后时代的事实操作标准,并且这种思想方法迅速被移植扩展到了非javascript的其他领域,而我们采用类Jquery的选择定位语法是非常明智的选择。

 

jsoup 的过人之处——选择器

前面我们已经简单的介绍了 jsoup 是如何使用选择器来对元素进行检索的。本节我们把重点放在选择器本身强大的语法上。下表是 jsoup 选择器的所有语法详细列表。


表 2. 基本用法:

tagname 使用标签名来定位,例如 a
ns|tag 使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素
#id 使用元素 id 定位,例如 #logo
.class 使用元素的 class 属性定位,例如 .head
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] 使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value], [attr$=value], [attr*=value] 这三个语法分别代表,属性以 value 开头、结尾以及包含
[attr~=regex] 使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)]
* 定位所有元素

 

以上是最基本的选择器语法,这些语法也可以组合起来使用,下面是 jsoup 支持的组合用法:


表 3:组合用法:

el#id 定位 id 值某个元素,例如 a#logo -> <a id=logo href= … >
el.class 定位 class 为指定值的元素,例如 div.head -> <div class=head>xxxx</div>
el[attr] 定位所有定义了某属性的元素,例如 a[href]
以上三个任意组合 例如 a[href]#logo 、a[name].outerlink
ancestor child 这五种都是元素之间组合关系的选择器语法,其中包括父子关系、合并关系和层次关系。
parent > child
siblingA + siblingB
siblingA ~ siblingX
el, el, el

 

除了一些基本的语法以及这些语法进行组合外,jsoup 还支持使用表达式进行元素过滤选择。下面是 jsoup 支持的所有表达式一览表:


表 4. 表达式:

:lt(n) 例如 td:lt(3) 表示 小于三列
:gt(n) div p:gt(2) 表示 div 中包含 2 个以上的 p
:eq(n) form input:eq(1) 表示只包含一个 input 的表单
:has(seletor) div:has(p) 表示包含了 p 元素的 div
:not(selector) div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表
:contains(text) 包含某文本的元素,不区分大小写,例如 p:contains(oschina)
:containsOwn(text) 文本信息完全等于指定条件的过滤
:matches(regex) 使用正则表达式进行文本过滤:div:matches((?i)login)
:matchesOwn(regex) 使用正则表达式找到自身的文本

 


总结

jsoup 的基本功能到这里就介绍完毕,但由于 jsoup 良好的可扩展性 API 设计,你可以通过选择器的定义来开发出非常强大的 HTML 解析功能。再加上 jsoup 项目本身的开发也非常活跃,因此如果你正在使用 Java ,需要对 HTML 进行处理,不妨试试。

 

分享到:
评论

相关推荐

    CitectScada

    CitectSCADA是由施耐德电气提供的先进监控和数据采集(Supervisory Control and Data Acquisition,简称SCADA)系统。它主要用于工业自动化领域,能够收集、监控和分析来自各种工业设备的实时数据。SCADA系统的核心...

    用Lucene实现简单搜索引擎【文档+代码】

    通过它,我们可以快速地建立一个高效的搜索引擎,无论是在网站、应用还是内部系统中,都能提高信息检索的效率。在实际应用中,我们还可以结合Solr或Elasticsearch这些基于Lucene的服务器端框架,进一步扩展搜索功能...

    大数据开发的概要介绍与分析

    ### 大数据开发概要介绍与分析 #### 一、大数据开发概述 随着信息技术的快速发展,大数据已成为当今社会的重要组成部分。大数据开发涉及多个方面,包括数据的采集、存储、处理、分析以及可视化等。这些过程共同...

    大数据学习路线和相关技术

    在大数据领域,学习路线通常涵盖多个关键组成...通过学习以上技术并掌握其应用场景,你将能够构建和管理高效的大数据解决方案,从数据采集、处理到分析,最终实现商业价值。不断探索和实践,你将成为这个领域的专家。

    hmyjsmst.docx

    - 分布式系统指的是分布在不同地理位置的计算机之间通过网络进行通信和协作,而集群通常指在同一位置由多台计算机组成的系统。 - **集群负载均衡分布式有什么区别** - 负载均衡主要是指将任务均匀地分配给集群中的...

    elasticsearch-cookbook-ebook.pdf

    - **监控告警**:介绍如何基于Elasticsearch搭建实时监控系统,并实现自动化告警机制。 ### 总结 《Elasticsearch 8.x Cookbook》一书全面覆盖了Elasticsearch的核心概念、部署管理、高级搜索技巧、性能优化等方面...

    shell入门到进阶,脚本机动化

    在应用管理方面,shell脚本不仅可以用于KVM虚拟机的管理,还能实现对集群的扩容管理,如对MySQL数据库的管理,甚至对硬件设备(如DELL R720服务器)的RAID配置进行批量操作。这些任务往往涉及复杂的步骤和参数调整,...

    ELK_Stack_权威指南

    此外,ELK Stack还常与Beats结合使用,Beats是一系列轻量级的数据采集器,如Filebeat、Metricbeat、Packetbeat等,它们分别负责收集日志、系统和网络数据,并发送到Logstash或直接到Elasticsearch。书中可能还会涵盖...

    华为HCIA-大数据认证练试题与答案-202010.pdf

    1. 大数据技术:大数据技术是指能够处理海量、高速、多样化的信息资产的技术,包括数据采集、存储、处理、分析和展示等多个环节。它可以帮助企业发现新的商业模式,进行信用评估,商品推荐,以及运营分析等。 2. ...

    就业提升day03.docx

    - Source:数据采集器,连接数据源,如服务器日志文件,将数据导入Flume。 - Sink:数据接收器,负责将数据传送到下一级Agent或最终存储系统。 - Channel:数据缓冲区,存储从Source接收到的数据,等待传输到Sink。 ...

    如何有效的学习大数据语言.docx

    理解Hadoop的运行机制,掌握HDFS的数据存储和MapReduce的并行计算原理,以及如何部署和管理Hadoop集群,如YARN资源调度器的使用,都是大数据学习的重点。 Hive是基于Hadoop的数据仓库工具,它提供了SQL-like查询...

    ApacheCN 大数据译文集.zip

    译文可能会讲解Flume的数据源、通道和接收器配置,以及如何搭建高可用的Flume集群。 4. **Kafka**:Kafka是一个高吞吐量的分布式消息系统,常用于实时数据流处理。译文可能包括Kafka的基本概念、生产者和消费者模型...

    elasticsearch

    **Elasticsearch技术解析与实战** Elasticsearch是一款开源的全文搜索引擎,基于Lucene库,设计为分布式、RESTful风格的搜索和数据分析引擎。它在处理海量数据时提供了高可用性和弹性,广泛应用于日志分析、实时...

    0、知识点1

    9. **协调服务Zookeeper**:Zookeeper 是一个分布式协调服务,常用于集群管理、配置管理、命名服务等,是分布式系统中的重要组件。 10. **Elasticsearch**:Elasticsearch 是一个实时的分布式搜索和分析引擎,常...

    人工智能-项目实践-搜索引擎-基于es的搜索引擎

    Elasticsearch提供了用户认证、授权和审计功能,通过X-Pack插件,可以实现对集群、索引和API的访问控制。 综上所述,基于Elasticsearch的搜索引擎项目实践涵盖了从基础的全文搜索理论到实际的系统设计与开发,涉及...

    elasticsearch资料,内容详细

    Logstash 用于收集、转换和发送各种日志数据,Kibana 提供可视化界面,Beats 是轻量级数据采集器,共同构成了强大的数据处理链路。 综上所述,Elasticsearch 不仅是一个搜索引擎,更是一个功能全面的数据平台,涵盖...

    易鲸捷国产分布式数据库在金融行业的应用.pptx

    - **QianBase金融高级版**:专为金融行业设计,高度兼容Oracle语法,增强事务处理能力,适用于金融核心交易系统和其他需要金融级事务处理的业务场景。 - **EsgynDB企业融合版**:是一款融合型数据库,支持OLTP、OLAP...

    matlab开发-TektronixTDS1002BOscilloscope

    在MATLAB环境中,开发针对Tektronix TDS1002B示波器的接口是一项技术密集型的任务,涉及到信号采集、数据处理以及并行计算等多个领域的知识。Tektronix TDS1002B是一款双通道数字存储示波器,广泛应用于电子工程和...

Global site tag (gtag.js) - Google Analytics