『Rubyによるクローラー開発技法』 、相変わらずamazonの在庫が戻らないです(泣)
みんなの反応 で
5 : koyancya@hatena 2014/07/31 14:06:18
きっとページを開くと Emacs の本なんですよね
これに爆笑してしまいました。
というわけで突如Emacs×Rubyクローラーな話題を。
僕は、まあなんだかんだ言ってるけど org-mode 愛用してます。
その中でもorg-babelは可能性があっておもしろいと感じています。
僕は昔からWebサイトから情報を抜き出すスクリプト…
クローラー(というほど大きな物ではない10行前後のもの)を
たくさん作ってきました。
個人的に情報を整理して Emacs や w3m で
見やすい形に整形する目的が多いです。
org-babelを使えば、ソースコードと実行結果を
1つのファイルにまとめられます。
短いスクリプトをorg文書に埋め込んでおいて、
ソースコードの部分でC-c C-cを押すだけでorgファイルが
書き変わります。
org-babelの #+BEGIN_SRC 行で「:results output」を指定すると
出力結果がソースコードの後に書き出されます。
多くの場合はこれでいいのですが、org文書を吐き出すコードの場合は
「#+begin_example 〜 #+end_example」で囲まれてしまうため、
都合がよくありません。
org文書を書き出す場合は「:results output raw」を指定します。
以下の例は僕のサイトの記事一覧をとってきます。
* rubikitch.com 記事一覧 #+BEGIN_SRC ruby :results output raw require 'nokogiri' require 'open-uri' links = (Nokogiri(open("http://rubikitch.com/?sitemap").read).at('ul.sitemap'))/'a' links.map{|a| [ a["href"], a.content ] }.each{|href,title| puts "- [[#{href}][#{title}]]" } #+END_SRC #+RESULTS: - [[http://rubikitch.com][るびきち×Emacs]] - [[http://rubikitch.com/emacs-intro/][Emacsとは]] - [[http://rubikitch.com/package-initialize/][パッケージの初期設定]] 略
サイトマップ http://rubikitch.com/?sitemap の内容をNokogiriで解析し、
class="sitemap"なるUL要素を取得し、
内部のA要素からリンクとタイトルを得て、
org文書に出力しているだけです。
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。