整套解决方案:网站集群系统—采集器技术实现之语法介绍

优采云 发布时间: 2021-01-03 11:21

  整套解决方案:网站集群系统—采集器技术实现之语法介绍

  Xilintong网站集群系统采集器的内容自动采用最新的jquery选择器语法,放弃了使用regexp表达式的单一方法,这种方法对于普通人来说是很难掌握的,并且一般的Web设计人员都可以了解CSS JQuery选择表达式以定位网页中的元素。这种方法简单,灵活且非常精确,极大地简化了最难编译的代码采集器的难度。

  例如采集某个页面的新闻部分的新闻超链接而不是所有链接,首先需要根据html内容特征定位这些链接,并且html代码如下:

  文章1

  文章2

  ...

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

  例如,假设采集 文章标题,页面标题的html编码为

  文章标题示例

  用于提取页面标题的表达式为:#doctitle

  在采集语法中,不仅可以使用juqery语法,而且同时支持传统的正则表达式表达式,并且可以实现更复杂的正则表达式替换表达式。例如:时间提取和转换的表达式:正则表达式:{(\ d {4})year(\ d {1,2})month(\ d {1,2})day \ s(\ d {1, 2}:\ d {1,2})} / {$ 1- $ 2- $ 3 $ 4}

  jquery是当今最受欢迎的javascript基本类库。它简洁,灵活且跨浏览器的操作语法被认为是后Web2.时代的实际操作标准,并且这种思想方法很快被移植并扩展到了Java之外的其他领域。对于我们来说,使用类似Jquery的选择定位语法是非常明智的选择。

  jsoup-selector的卓越表现

  之前,我们已经简要介绍了jsoup如何使用选择器来检索元素。在本节中,我们将重点介绍选择器本身的强大语法。下表是jsoup选择器所有语法的详细列表。

  表2.的基本用法:

  标签名

  使用标签名称来查找,例如

  ns |标签

  使用名称空间的标签定位,例如fb:name来查找元素

  #id

  使用元素ID进行定位,例如#logo

  .class

  使用元素的class属性进行定位,例如.head

  [属性]

  使用元素属性进行定位,例如,[href]表示检索具有href属性的所有元素

  [^ attr]

  使用元素的属性名称前缀进行定位,例如[^ data-]用于查找HTML5数据集属性

  [attr = value]

  使用属性值进行定位,例如[width = 500]定位所有宽度属性值为500的元素

  [attr ^ = value],[attr $ = value],[attr * = value]

  这三个语法分别表示,属性以值开头,以结束并收录

  [attr〜= regex]

  使用正则表达式过滤属性值,例如img [src〜=(?i)\。(png | jpe?g)]

  *

  找到所有元素

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

  表3:组合用法:

  el#id

  找到具有id值的元素,例如a#logo->

  el.class

  定位其类为指定值的元素,例如div.head->

  xxxx

  el [attr]

  找到所有定义属性的元素,例如a [href]

  以上三种的任何组合

  例如a [href]#logo,a [name] .outerlink

  祖先的孩子

  这五个都是用于元素之间组合关系的选择器语法,包括父子关系,合并关系和层次关系。

  父母>孩子

  兄弟姐妹A +兄弟姐妹

  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)表示仅收录一个输入的表单

  :有(选择)

  div:has(p)表示收录p元素的div

  :不是(选择器)

  div:not(.logo)表示不收录class = logo元素的所有div的列表

  :收录(文本)

  收录特定文本的元素不区分大小写,例如p:contains(oschina)

  :containsOwn(text)

  文本信息完全等于对指定条件的过滤

  :matches(regex)

  使用正则表达式进行文本过滤:div:matches((?i)login)

  :matchesOwn(regex)

  使用正则表达式查找自己的文本

  摘要

  这里已经介绍了jsoup的基本功能,但是由于jsoup的API具有良好的可扩展性,因此可以通过选择器的定义开发非常强大的HTML解析功能。此外,jsoup项目本身的开发也非常活跃,因此,如果您使用Java并且需要处理HTML,则不妨尝试一下。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线