项目作者: taylorwood

项目描述 :
CSS-to-Hickory selector translator
高级语言: Clojure
项目地址: git://github.com/taylorwood/hickory-css-selector.git
创建时间: 2018-10-10T03:26:12Z
项目社区:https://github.com/taylorwood/hickory-css-selector

开源协议:MIT License

下载


Hickory CSS Selectors

Hickory provides a namespace of selectors
with functionality similar to CSS selectors, for selecting particular elements from a document tree.

This proof-of-concept provides a CSS-to-Hickory selector translator that can turn
a CSS selector like this:

  1. div#main > ul.styled a[href]

into a Hickory selector like this:

  1. (s/descendant
  2. (s/child
  3. (s/and (s/tag :div) (s/id :main))
  4. (s/and (s/tag :ul) (s/class :styled)))
  5. (s/and (s/tag :a) (s/attr :href)))

CSS selectors can be used as a concise syntax for extracting structured data from HTML documents.

Usage

Add a dependency:

  1. {:deps {hickory-css-selector
  2. {:git/url "https://github.com/taylorwood/hickory-css-selector"}}}

Convert some HTML into Hickory, then select elements from it using CSS selector syntax:

  1. (require '(hickory [core :as h] [select :as s]))
  2. (def doc (h/as-hickory (h/parse (slurp "https://clojure.org"))))
  3. (use 'hickory-css-selectors)
  4. (s/select (parse-css-selector "a[href~=reference]") doc)
  5. =>
  6. [{:type :element,
  7. :attrs
  8. {:href "/reference/documentation", :class "w-nav-link clj-nav-link"},
  9. :tag :a,
  10. :content ["Reference‍"]}]

Tests

  1. $ clojure -A:test

Contributions

I welcome them!

Many thanks to @vitobasso for adding sibling (~, +), :has, and :contains support!