Plaster

common-lisp
[SBCL] CL-USER> (ql:quickload '(plump drakma)) To load "plump": Load 1 ASDF system: plump ; Loading "plump" To load "drakma": Load 1 ASDF system: drakma ; Loading "drakma" .... (PLUMP DRAKMA) [SBCL] CL-USER> (defun tree-search (node predicate children) (let ((child-results (loop :for child :across (funcall children node) :append (tree-search child predicate children)))) (if (funcall predicate node) (cons node child-results) child-results))) TREE-SEARCH [SBCL] CL-USER> (defun children (node) (if (plump:has-child-nodes node) (plump:children node) #())) CHILDREN [SBCL] CL-USER> (defun commentp (node) (typep node 'plump:comment)) COMMENTP [SBCL] CL-USER> (loop :for comment :in (tree-search (plump:parse (drakma:http-request "http://placekitten.com")) #'commentp #'children) :do (print (plump:serialize comment nil))) "<!--[if lt IE 7 ]> <html lang=\"en\" class=\"no-js ie6\"> <![endif]-->" "<!--[if IE 7 ]> <html lang=\"en\" class=\"no-js ie7\"> <![endif]-->" "<!--[if IE 8 ]> <html lang=\"en\" class=\"no-js ie8\"> <![endif]-->" "<!--[if IE 9 ]> <html lang=\"en\" class=\"no-js ie9\"> <![endif]-->" "<!--[if (gt IE 9)|!(IE)]><!-->" "<!--<![endif]-->" "<!-- BREAKING NEWS: KITTENS FKN LOVE YARN __ __, \\,`~\"~` / .-=-. / . .\\ / .-. \\ { = Y}= (_/ \\ \\ \\ / \\ \\ _/`'`'`b \\ `.__.-'` \\-._ | '.__ `'-;_ | _.' `'-.__) \\ ;_..-`'/ // \\ | / / | // | \\ \\ \\__) \\ // / \\__) '.// .' `'-'` -->" "<!-- Standard Metadata -->" "<!-- Dublin Core Metadata -->" "<!-- Open Graph Metadata -->" "<!-- Navigation -->" "<!-- Icons -->" "<!-- CSS -->" "<!-- Analytics -->" "<!-- /#header -->" "<!-- /#primary-content -->" "<!-- /#footer -->" "<!-- /#container -->" NIL [SBCL] CL-USER>