sqlite-html 作者 asg017

星标

README 源代码

sqlite-html

一个用于查询、操作和创建 HTML 元素的 SQLite 扩展。

  • 使用 CSS 选择器从 HTML 中提取 HTML 或文本,例如 .querySelector().innerHTML.innerText
  • 从 CSS 选择器生成匹配元素的表格,例如 .querySelectorAll()
  • 在查询中安全地创建 HTML 元素,例如 .createElement().appendChild()

sqlite-html 的 API 建模自官方的 JSON1 SQLite 扩展。

这个扩展是用 Go 编写的,感谢 riyaz-ali/sqlite。虽然这个库旨在快速高效,但总体上比纯 C SQLite 扩展要慢,但在实践中你可能不会注意到太大的区别。

用法

Skywalker"">
.load ./html0
select html_extract('

Anakin Skywalker

'
, 'b'); -- "Skywalker"

sqlite-html 类似于其他 HTML 抓取工具,例如 BeautifulSoup (Python)、cheerio (Node.js) 或 nokogiri (Ruby)。你可以使用 CSS 选择器从 HTML 源中提取单个元素或元素组来查询数据。

例如,在这里我们查找 index.html 文件中的所有 href 链接。

select
  text as name,
  html_attribute_get(anchors, 'a', 'href') as href
from html_each(readfile('index.html'), 'a') as anchors

我们还可以使用 html_element 安全地生成 HTML,它建模自 React 的 React.createElement

卢克,我是你的父亲

"">
select html_element('p', null,
  'Luke, I am your',
  html_element('b', null, 'father'),
  '!',

  html_element('img', json_object(
    'src', 'https://images.dog.ceo/breeds/groenendael/n02105056_4600.jpg',
    'width', 200
  ))
);

-- "

Luke, I am yourfather!

"

文档

完整的 API 参考请参阅 docs.md

安装

语言 安装
Python pip install sqlite-html PyPI
Datasette datasette install datasette-sqlite-html Datasette
Node.js npm install sqlite-html npm
Deno deno.land/x/sqlite_html deno.land/x release
Ruby gem install sqlite-html Gem
Github Release GitHub tag (latest SemVer pre-release)

发布页面包含适用于 Linux amd64、MacOS amd64 (不支持 arm) 和 Windows 的预构建二进制文件。

作为可加载扩展

如果你想将 sqlite-html 用作运行时可加载扩展 (Runtime-loadable extension),请从发布版本下载 html0.dylib (适用于 MacOS)、html0.so (Linux) 或 html0.dll (Windows) 文件,并将其加载到你的 SQLite 环境中。

注意:文件名中的 0 (html0.dylib/ html0.so/html0.dll) 表示 sqlite-html 的主版本。目前 sqlite-html 处于 v1 之前,因此未来版本可能会有重大更改。

例如,如果你正在使用 SQLite CLI,你可以这样加载库

.load ./html0
select html_version();
-- v0.0.1

或者在 Python 中,使用内置的 sqlite3 模块

import sqlite3

con = sqlite3.connect(":memory:")

con.enable_load_extension(True)
con.load_extension("./html0")

print(con.execute("select html_version()").fetchone())
# ('v0.0.1',)

或者在 Node.js 中,使用 better-sqlite3

const Database = require("better-sqlite3");
const db = new Database(":memory:");

db.loadExtension("./html0");

console.log(db.prepare("select html_version()").get());
// { 'html_version()': 'v0.0.1' }

或者使用 Datasette

datasette data.db --load-extension ./html0

另请参阅

  • sqlite-http,用于在 SQLite 中进行 HTTP 请求(与此工具搭配使用效果极佳)
  • htmlq,一个类似但基于 CLI 的使用 CSS 选择器的 HTML 查询工具
  • riyaz-ali/sqlite,这个库所依赖的出色的 Go 库
  • nalgeon/sqlean,几个用 C 编写的预编译实用 SQLite 函数