Skip to content

Latest commit

 

History

History
183 lines (125 loc) · 5.16 KB

x-sql.md

File metadata and controls

183 lines (125 loc) · 5.16 KB

X-SQL

英文 | 简体中文

介绍

我们开发了X-SQL,它可以直接查询网络,并将网页转换成表格和图表。

X-SQL是建立在H2数据库之上的,因此它与H2兼容,SQL方言也是H2。

下面展示了一个典型的X-SQL查询。

select
  dom_base_uri(dom) as url,
  dom_first_text(dom, '#productTitle') as title,
  str_substring_after(dom_first_href(dom, '#wayfinding-breadcrumbs_container ul li:last-child a'), '&node=') as category,
  dom_first_slim_html(dom, '#bylineInfo') as brand,
  dom_all_slim_htmls(dom, '#imageBlock img') as gallery,
  dom_first_slim_html(dom, '#landingImage, #imgTagWrapperId img, #imageBlock img:expr(width > 400)') as img,
  dom_first_text(dom, '#price tr td:contains(List Price) ~ td') as listprice,
  dom_first_text(dom, '#price tr td:matches(^Price) ~ td') as price,
  str_first_float(dom_first_text(dom, '#reviewsMedley .AverageCustomerReviews span:contains(out of)'), 0.0) as score
from load_and_select('https://www.amazon.com/dp/B0C1H26C46   -i 1d -njr 3', 'body');

PulsarRPA主要通过注册UDF来扩展H2数据库,但它也进行了其他扩展。

每个X-SQL函数都有一个命名空间,例如:

dom_base_uri() -> dom
str_substring_after() -> str

在上面的例子中,domstr是命名空间。如果一个X-SQL函数被声明为hasShortcut,那么可以忽略命名空间。

X-SQL函数不区分大小写,并且忽略所有的下划线(_)。

下面的X-SQL函数是相同的:

DOM_LOAD_AND_SELECT(url, 'body');
dom_loadAndSelect(url, 'body');
Dom_Load_And_Select(url, 'body');
dom_load_and_select(url, 'body');
dOm_____lo_AdaNd_S___elEct_____(url, 'body');

由于LOAD_AND_SELECT被声明为hasShortcut,可以忽略命名空间,下面的函数仍然是相同的:

LOAD_AND_SELECT(url, 'body');
loadAndSelect(url, 'body');
Load_And_Select(url, 'body');
load_and_select(url, 'body');
_____lo_AdaNd_S___elEct_____(url, 'body');

表格函数

每个表格函数返回一个ResultSet,并且可以出现在from子句中。

LOAD_AND_SELECT

LOAD_AND_SELECT(url [, cssSelector [, offset [, limit]]])

加载一个页面并选择元素,返回一个ResultSet。结果集包含两列:DOMDOC,两者都是ValueDom类型。

示例:

select
  dom_base_uri(dom)
from
  load_and_select('https://www.amazon.com/dp/B0C1H26C46',  'body', 1, 10)

DOM函数

DOM函数旨在查询DOM属性。每个DOM函数接受一个名为ValueDom的参数,它是一个Jsoup Element的包装器。

DOM函数定义在以下文件中:DomFunctions

所有DOM函数都在命名空间DOM中。

DOM_BASE_URI

DOM_BASE_URI(dom)

返回HTML文档的URI。

示例:

select dom_base_uri(dom) from load_and_select('https://www.amazon.com/dp/B0C1H26C46',  'body')

DOM选择函数

DOM选择函数旨在从DOM中查询元素及其属性。

每个DOM函数接受一个名为DOM的参数(不区分大小写),类型为ValueDom,它是一个Jsoup Element的包装器。

DOM选择函数通常也接受一个名为cssSelector的参数,用于选择DOM的子元素。

最重要的DOM选择函数定义在以下文件中:DomSelectFunctions

所有DOM选择函数都在命名空间DOM中。

DOM_FIRST_TEXT

DOM_FIRST_TEXT(dom, cssSelector)

返回cssSelectordom内选择的第一个元素的文本内容,类似于以下JavaScript代码。

dom.querySelector(cssSelector).textContent

示例:

select
  dom_first_text(dom, '#productName') as Name,
  dom_first_text(dom, '#price') as Price,
  dom_first_text(dom, '#star') as StarNum
from
  load_and_select('https://www.example.com/zgbs/appliances',  'ul.item-collection li.item')

DOM_ALL_TEXTS

DOM_ALL_TEXTS(dom, cssSelector)

返回cssSelectordom内选择的所有元素的文本内容数组,类似于以下JavaScript伪代码。

dom.querySelectorAll(cssSelector).map(e => e.textContent)

示例:

select
  dom_all_texts(dom, 'ul li.item a.name') as ProductNames,
  dom_all_texts(dom, 'ul li.item span.price') as ProductPrices,
  dom_all_texts(dom, 'ul li.item span.star') as ProductStars
from
  load_and_select('https://www.example.com/zgbs/appliances',  'div.products')

字符串函数

大多数字符串函数是通过编程自动从org.apache.commons.lang3.StringUtils转换而来。您可以在以下文件中找到UDF定义:StringFunctions

所有字符串函数都在命名空间STR中。

STR_SUBSTRING_AFTER

STR_SUBSTRING_AFTER(str, separator)

获取分隔符第一次出现后的子字符串。

示例:

select
  str_substring_after(dom_first_text(dom, '#price'), '$') as Price
from
  load_and_select('https://www.amazon.com/dp/B0C1H26C46',  'body');