Common lispならセットアップから実行まで13行でスクレイピング可能

おい、ヲタクのお前らlispに興味あるか?Webには?

無いって?

知ったことか

じゃあ始めよう

 

1.SBCLをインストールしよう。SBCLが何かって?ググってくれ

$ brew update
$ brew install sbcl
clispっていう処理系はアップデート止まってるから使わなくてよし

 

2.quick lispをインストール。quick lispとは?ググれ

$ curl -O http://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp

 

こっからはsbclのコンソールの操作だ

(quicklisp-quickstart:install)
(ql:add-to-init-file)

3.quick lisplispのライブラリをインストール
(ql:quickload :drakma)
(ql:quickload :plump)
(ql:quickload :clss)

4.コーヒーでも飲んで一息ついてくれ

5.以下コピペ
(defvar html (drakma:http-request "http://www.paulgraham.com/hp.html"))
(defvar parse-html (plump:parse html))
(plump:text (car (coerce (clss:select "title" parse-html) 'list)))

 

以上で「"Hackers and Painters"」と表示されたら問題ない

※ちなみに環境はmacOS 10.12

これはdev.toで書いた記事でリアクションは7つ付いた

lispやるならdev.to(英語圏)だね

Begginnig Common Lisp for web scraping

 

 

hey nerds, do you like web? interest lisp?
no?
i dont care
okay i do

Step1: install sbcl
$ brew update
$ brew install sbcl
(now, clisp is stopped update)

Step2: install quick lisp
$ curl -O http://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp

----------↓↓↓starting sbcl console↓↓↓-----

(quicklisp-quickstart:install)
(ql:add-to-init-file)

Step3: install libraries to sbcl by quicklisp
(ql:quickload :drakma)
(ql:quickload :plump)
(ql:quickload :clss)

Step4: drink a coffee

Step5: write codes and eval
(defvar html (drakma:http-request "http://www.paulgraham.com/hp.html"))
(defvar parse-html (plump:parse html))
(plump:text (car (coerce (clss:select "title" parse-html) 'list)))

on lispを手に取ってから今現在までの流れ

ここまでの流れ

だいぶ前に買って持ってたon lisp読む→全然意味が分からない→けど面白そう→楽器やるの飽きた時にlispやるか→lisp全然分かんねー→実践common lispが良いらしいので借りて読む→全然分かんねー→入門 common lisp借りて読む→ちょっとだけ分かる→って言っても作りたいものないとモチベーション続かない→webサイト作りたい→参考にするプログラムないだろうか→ウェブフレームワークって言ったらruby on railsrubyそんな詳しくない→楽しいrubyのプログラムリスト読む→試しにプログラムリストのページのrubyプログラム部分だけ抽出rubyプログラム書くか→抽出できた→lisp on railsやりたいならrubyのコード読む環境整えなきゃな→ ctags導入→sublime text良さそう→sublime textとsublime textのctagsプラグイン導入→これめっちゃ良いやんけ→sublime textのlisp環境作れるやんけ→sublime textでreplめっちゃ便利!!→on lispの隣にシェルスクリプトのリファレンス本あったので読む→シェルスクリプトめっちゃ便利やんけls >> list.txtとか→前作ったrubyプログラム部分抜き出す奴をシェルスクリプトで作る→できない...→教えてgooに質問投稿→3時間くらいで回答あった→教えてgooめっちゃ便利やんけ→人間は1人では生きていけない→学びがある→入門common lispにあるコードとかマンガで学ぶlispのコードをぼちぼち覚えるか→やっぱりrubyでできることをlispで再現するか→抽出するやつをlispでやるか→イマココ

lisp chords 2

'lico

'suzu

(cons 'lico 'suzu)

'1

(cons 2 nil)

(cons 1 (cons 2 nil))

(cons '+ (cons 1 (cons 2 nil)))

(cons 1 (cons 2 nil))

(eval '(+ 1 2))

 

(eval '(cons '+ (cons 1 (cons 2 nil))))

(eval '(list '+ 1 2))

 

 

'(cons '+  (cons 1 (cons 2 nil)))

 

 

(eval (eval '(cons '+ (cons 1 (cons 2 nil)))))

(eval (eval '(list '+ 1 2)))

 

(eval '(cons '+ (cons 1 (cons 2 nil))))

(eval (cons '+ (cons 1 (cons 2 nil))))

 

(cons 'a (cons 'b nil))

(cons 'a (cons b nil))

(cons 'a (cons "b" nil))

(cons a (cons "b" nil))

 

(cdr (cons 'a (cons 'b nil)))

(cdr '(a b))

(car '(quote a))

(car ''a)

lisp chords 1

f:id:lisp_yanaka:20170318151937j:plain

(+ 1 2 3)
(+ 1 (/ 1 3))
(+ 1/3 1/3 1/3)
(+ 0.3 0.3 0.3)

 

(cons 1 2)
(car (cons 1 2))
(cdr (cons 1 2))
(cons (cdr (cons 1 2))3)
(cdr (cons (cdr (cons 1 2)) 3))
(car (cons (cdr (cons 1 2)) 3))
(cons (cons 1 2) (cons 3 4))
(list (cons 1 2) (cons 3 4))
(car (cons (cons 1 2) (cons 3 4)))
(cdr (cons (cons 1 2) (cons 3 4)))
(cdr (cdr (cons (cons 1 2) (cons 3 4))))
(* (+ 1 2) (- 3 4) (+ 5 6))
(defun 2jyo (n) (* n n))
(2jyo 2)
(defun inc (x &optional (y 1)) (+ x y))
(inc 1)
(inc 1 2)
(+ (print (+ 1 2)) (print (+ 3 4)))
'(+ 1 2)