英文 | 简体中文
我们开发了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
在上面的例子中,dom
和str
是命名空间。如果一个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(url [, cssSelector [, offset [, limit]]])
加载一个页面并选择元素,返回一个ResultSet。结果集包含两列:DOM
和DOC
,两者都是ValueDom
类型。
示例:
select
dom_base_uri(dom)
from
load_and_select('https://www.amazon.com/dp/B0C1H26C46', 'body', 1, 10)
DOM函数旨在查询DOM属性。每个DOM函数接受一个名为ValueDom
的参数,它是一个Jsoup Element的包装器。
DOM函数定义在以下文件中:DomFunctions。
所有DOM函数都在命名空间DOM
中。
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
的参数(不区分大小写),类型为ValueDom
,它是一个Jsoup Element
的包装器。
DOM选择函数通常也接受一个名为cssSelector
的参数,用于选择DOM
的子元素。
最重要的DOM选择函数定义在以下文件中:DomSelectFunctions。
所有DOM选择函数都在命名空间DOM
中。
DOM_FIRST_TEXT(dom, cssSelector)
返回cssSelector
在dom
内选择的第一个元素的文本内容,类似于以下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, cssSelector)
返回cssSelector
在dom
内选择的所有元素的文本内容数组,类似于以下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, separator)
获取分隔符第一次出现后的子字符串。
示例:
select
str_substring_after(dom_first_text(dom, '#price'), '$') as Price
from
load_and_select('https://www.amazon.com/dp/B0C1H26C46', 'body');