enlive icon indicating copy to clipboard operation
enlive copied to clipboard

query html document with css selectors in elisp

  • enlive

[[https://travis-ci.org/zweifisch/enlive][file:https://travis-ci.org/zweifisch/enlive.svg?branch=master]] [[http://stable.melpa.org/#/enlive][file:http://stable.melpa.org/packages/enlive-badge.svg]]

query html document with css selectors

** supported selectors

| selector | description | |----------+----------------------------------| | =:= | id =[:main]= | | =.= | class =[.content.home-page]= | | =tag= | tagname =[p.demo a]= | | =>= | direct children =[.article > p]= | | =*= | all nodes =[:section > *]= |

  • use =:= for id not =#=
  • leave spaces around =>=, like =[:app.items > .item > a]=

** usage

*** enlive-fetch

: #+BEGIN_SRC elisp : (require 'enlive) : : (enlive-text : (enlive-query (enlive-fetch "http://gnu.org/") [title])) : #+END_SRC : : #+RESULTS: : : The GNU Operating System and the Free Software Movement

*** enlive-parse

: #+BEGIN_SRC elisp :results raw : (enlive-query-all : (enlive-parse "<div class="content"> :

p1

:

p2

: ") : [.content p]) : #+END_SRC : : #+RESULTS: : ((p nil p1) (p nil p2))

*** enlive-query

  • enlive-query-all will return all node mached

*** enlive-with

: #+BEGIN_SRC elisp :results raw : (macroexpand '(enlive-with element : (enlive-query [div]) : (enlive-query-all [.cls]))) : #+END_SRC : : #+RESULTS: : (progn (enlive-query element [div]) (enlive-query-all element [.cls]))

*** enlive-let

: #+BEGIN_SRC elisp :results raw : (enlive-let (enlive-parse "<i class="foo">foo<i class="bar">bar") : ((foo [.foo]) : (bar [.bar])) : (list (enlive-text (car foo)) (enlive-text (car bar)))) : #+END_SRC : : #+RESULTS: : (foo bar)

*** some dom related functions

  • =enlive-get-element-by-id=
  • =enlive-get-elements-by-tag-name=
  • =enlive-get-elements-by-class-name=
  • =enlive-has-class=
  • =enlive-attr=