『Rubyによるクローラー開発技法』 、相変わらずamazonの在庫が戻らないです(泣)

みんなの反応

5 : koyancya@hatena 2014/07/31 14:06:18
きっとページを開くと Emacs の本なんですよね

これに爆笑してしまいました。

というわけで突如Emacs×Rubyクローラーな話題を。

僕は、まあなんだかんだ言ってるけど org-mode 愛用してます。

その中でもorg-babelは可能性があっておもしろいと感じています。

僕は昔からWebサイトから情報を抜き出すスクリプト…
クローラー(というほど大きな物ではない10行前後のもの)を
たくさん作ってきました。

個人的に情報を整理して Emacsw3m
見やすい形に整形する目的が多いです。

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文書に出力しているだけです。

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。