プログラマでありたい

おっさんになっても、プログラマでありつづけたい

『Rubyによるクローラー開発技法』の増刷決定しました

 少し遅くなりましたが、ご報告です。先月末(8/23)に発売した「Rubyによるクローラー開発技法」ですが、発売10日程で何と増刷決定しました!!
 発売前から、テーマがマニアック過ぎるとか、値段が高過ぎると、主に私の中で心配していましたが、想定外の好調さに驚いています。たくさんの方に買っていただき、本当にありがとうございます。Amazonの方でも売上げ好調で、「本 > コンピュータ・IT > プログラミング > Ruby」では、1週間1位を継続、1つ上の、「本 > コンピュータ・IT > プログラミング」でも、わりと1位を継続していて、「本 > コンピュータ・IT」でも、ランクインしています。

どういった層が買うのか



 発売後、TwitterやGoogleでつぶさに観察しています。「Rubyによるクローラー開発技法」の購入者層は、Rubyやクローラーをバリバリやっているという人よりは、どちらも、もしくはどちらかが初めてで、本を読みながら学んでいくというスタイルの人が多いようです。そういった人には、Rubyの概要から、クローラーの概念まで、細かく解説しているこの本はマッチするようです。特にRubyの説明については、Ruby技術本の第一人者の一人である、るびきちさんの解説なので勉強になると思います。(私も勉強させて頂きました)
 一方で、タイトルからして中上級者向けと思って買った人に対しては、少し物足りないのかもしれません。クローラーを作ってスクレイピングをしていると、必然的に可視化や統計処理、自然言語処理に向かうことになると思います。そこに対する足がかりの記述をもう少しすれば良かったと思います。
 実は企画段階で、その辺りも少し書きたいと考えていました。しかし、色々話しあう上で、テーマがぶれすぎるので削っていきました。結果的には良かったと思いますが、巻末インデックスか何かで文献や参考リンクでも書いておけばよかったと思います。その点は、いずれブログか何かで補完しようと思います。

イベント



 出版社の方に聞いたのですが、RubyKaigiでジュンク堂さんが販売会をするそうです。予定があえば私も参加して、サイン会になるようです。正式に決まり次第、改めて連絡させて頂きます。しかし実際にするとなると、私は字が汚いので、小学生が教科書に名前を書いたみたいになるので、本にサインすることに躊躇します。でも、買ってくれる人に直接あって、話を聞いてみたいというのはあります。
 またググっていて発見したのですが、「Rubyによるクローラー開発技法 読書会」なるものが、9/27(土)に兵庫県尼崎市で開催されるようです。どんな会まったく知りませんが、光栄です。いつか読書会に参加してみたいですね。

See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次
本を書く前に準備したこと、執筆中にしていたこと


参照:
『Rubyによるクローラー開発技法』増刷決定!Amazon 1位なう!!個人用即席クローラーの作り方 | るびきち×Emacs
9月27日 Rubyによるクローラー開発技法 読書会 第1回(兵庫県)

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

本を書く前に準備したこと、執筆中にしていたこと

 「Rubyによるクローラー開発技法」は、2013年12月に話を頂き、2月くらいまで企画を検討し、2月〜7月の約5ヶ月間で執筆しました。役に立つかどうか解らないけど、本を書く前に準備したことと、執筆中にしたことを残していこうと思います。次回があれば、もう少し上手くできるようにしたいですね。

事前に準備したこと


執筆環境を構築した

 執筆環境は、いの一番で用意しました。具体的には、下記の2つです。

  • GitHubの有料版アカウントを作成し、プライベートリポジトリを作った
  • MarkDown記法を覚えて、MarkDownから各種フォーマットに変換できる環境を作った

 GitHubのプライベートリポジトリを作ったのは正解でした。これが無ければ、いろいろ事故も起こったと思います。反面、Markdownの環境はメインのMacにしか作らなかったのが失敗でした。意外に色々な端末で書くことになったので、CIツールも用意してクラウド上でビルド出来る環境を作るべきでした。後は、表現力というところでは、Markdownは少し物足りません。この点は、ReVIEWの方に分があります。一方で、MarkdownであればGithubでほぼそのまま見ることが出来るので、悩ましいところです。

Markdown記法+Git+md2review+ReVIEWで原稿・ドキュメント管理

文章を書く技術の本を読んだ

 体系的な文章の書き方について学んだことがなかったので、文章術の本を何冊も買い込んで読んでみました。その効果で文章力が上がったのか自分では解りませんが、下記の2つのことを心がけるようになりました。

  • 一文一文を短くなるように心がける
  • できるだけ断定調にする

 幾つか読んだ中で、技術書を書くという観点では、「理科系の作文技術」が一番役にたちました。テクニカルな文章を書く場合には、参考になります。
 また、物事を一番解りやすく伝える作家として、私の中では、阿刀田高さんが一番です。氏の数あるエッセイの1つに、「日本語を書く作法・読む作法」という本があったので、これも読みました。勉強になった反面、他の阿刀田さんの本を無限に読み続けるというループに陥ってしましました。目的意識をしっかりですね。

Rubyの勉強をした

 あまりRuby力に自信がないので、共著者のるびきちさんの本をよんでRubyの勉強をしました。正直勉強に充てられる時間が足りなかったので、今後精進します。

対象読者の想定をした

 Rubyでクローラーというお題を頂いた時に、直感的にムリだろうと思いました。国内のRubyのエンジニアの数と、クローラーに興味がある割合。その二つを仮定して掛けあわせた結果、茨の道が見えました。そこで、勝手にターゲットを下記に設定しました。

  • 統計や自然言語処理に興味を持ちだして、その為のデータを収集しようとしている学生(学部3〜4年生)
  • SEOやWebマーケティングをしている人
  • ツールを使って作業を楽にしたいITエンジニア

 あまりRubyもクローラーも知らない人を想定し、入門書的な位置づけにしています。その意図通りになっているか、まだ解りません。ぜひ感想を聞かせて頂ければと思います。

執筆中にしていたこと



マイクロレベルでの執筆時間の管理をした

 パソコンで執筆すると、予想以上に誘惑が多いです。調べ物しているうちに、面白いページを見つけて、ずっと読み続けているということもありました。それを防止する為に、マイクロレベルで、時間を管理するようにしました。具体的にはポモドーロ・テクニックですね。これが中々良くて、普段の仕事をする上でも取り入れるようにしています。

パソコンで作業する際は、ポモドーロ・テクニック(Pomodoro Techinique)を使うとよい

ニーズの調査をしながら執筆した

 ターゲットは決めたものの、内容についてはどの辺に需要があるのか正直サッパリ解りませんでした。だから、書こうかなと思ったテーマについては、ブログで事前に記事にして反応を確かめることにしました。反応が大きかったものについては分量を多めにし、反応が無かったものは扱いを小さく、もしくは削りました。
 自画自賛ですが、これは割と良かったです。本来であれば、色々な人に査読をお願いするのがよいのでしょうが、客観的かつ的確な指摘を得るのは難しいのが実際のところです。ブログの場合、ブコメ等でストレートな感想を頂けるので、かなり参考になりました。また、間違っている部分も指摘されることもあり、大変助かりました。
 執筆前や執筆中に書いた記事は、次のようなものがあります。ブクマとTwitter、後は暫くしてのGoogleからの検索の流入を、反応の指標としました。

JavaScriptにも対応出来るruby製のクローラー、Masqueを試してみる
複数並行可能なRubyのクローラー、「cosmicrawler」を試してみた
あらためてRuby製のクローラー、"anemone"を調べてみた
Capybara-DSLのはなし
Ruby2.0の文字エンコーディングの簡単なまとめ。KconvとM17N
Ruby製のクローラー Anemoneの文字化け対策
Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath
FireFoxやChromeを使って任意のノードのXPathを簡単に抽出する方法について
Ruby製のクローラー Anemoneでストレージをファイルに変更する
RubyでYahoo! キーフレーズ抽出APIを使ってテキストマイニング
Ruby製のクローラー AnemoneでストレージをSQLite3, MongoDBに変更する
開発用プロキシ、「CocProxy」が便利
RubyでAmazon Product Advertising APIを再び使ってみる
RubyのHTTPS通信で、OpenSSL::SSL::SSLErrorが出たら?
Rubyのtwitterライブラリで、Twitter Streaming APIが扱えるようになっていた

執筆後にしたこと



 せっかく書いたのだから、誰も読んでくれないと悲しいです。ということで、自分で出来る範囲で宣伝をしてみました。

勉強会で宣伝

 幾つかの勉強会で機会を頂いて、クローラー関係の発表をさせて頂きました。登壇しなかった勉強会でも、懇親会なので今こんな本を書いているんですよと宣伝してました。

62nd Ruby/Rails勉強会@関西に参加してきた
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
「第2回Webスクレイピング勉強会@東京」に参加&発表してきました

 今後も機会があれば、勉強会で発表していきたいです。日程があえばどこでも行きますので、お気軽にTwitter等でご連絡いただければと思います。

ブログで宣伝

 効率としては、何気に一番よかったです。一方で、色々な勉強会で話していたこともあって、注目してもらえる下地があったのかもしれません。

『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次

 ブログ書いて、はてなのホットエントリーに載って、各種SNSでシェアされました。結果、Amazonの順位が一気にあがり、多くの人の目につくようになりました。正直な所、ビギナーズラックでしょうが、今後の参考にしようと思います。
f:id:dkfj:20140904092520p:plain

エゴ・サーチ

 ほぼ毎日、書名でGoogleやTwitterを検索して、反応を探しています。心折れることを覚悟してたのですが、今のところ好意的な反応が多くて嬉しい限りです。しかし、今後の糧に厳しいご意見もお待ちしております。
 ちなみに今や、関係する呟きやブログを見つけると、即TweetするBot状態になっております。「Rubyによるクローラー開発技法」という単語があれば反応しますので、興味がある人は試してみてください。

まとめ



 寝不足で死にそうになった半年でしたが、なかなか得がたい経験を積ませて貰いました。もう少し上手くやる方法は幾らでもありそうなので、その辺り今後も考えていこうと思います。


Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

利回りから東京圏と大阪圏の不動産を比較してみた

 ブログの方では言っていなかった知れませんが、今年の7月に東京に転勤になりました。当然の事ながら、家を探して引っ越しました。その時からモヤモヤっと思っていたことがあります。マンションの販売価格に較べて、賃料が安いという点です。つまり投資家目線で考えれば、利回りが低いということです。(一応補足しておくと、賃料自体は凄く高いです。)

 感覚値なのですが、以前住んでいた大阪の堀江3〜4丁目あたり(西長堀駅)は、大体利回りが7〜8%くらいでした。最近は少し上がり気味ですが、築20年位の50㎡の部屋で、賃料が10万円、売値が1500万円前後くらいです。利回りにすると、8%くらいです。当然、これより高いのも安いのもあるものの、およそこのような感じでした。
 一方で、東京や近隣の県で探すと、良いなと思うところは5〜6%くらいなのです。家賃が高くてたまらんと思う反面、これでは部屋の所有者(オーナー)もたまらんと思いました。

実際のデータを集めてみた



 自分の見聞きした範囲だけで判断すると見誤ることも多いので、データを少し集めてみて集計してみました。賃貸の情報サイトと中古マンションの取引情報サイトから関東、関西近辺のデータをスクレイピングしてみました。賃貸物件は数十万件、中古マンションの取引情報は数万件程度あつまりました。

 データの形式としては、次のようになっています

賃貸情報
  • 最寄り駅
  • 駅からの距離
  • 築年数
  • 建物の階数
  • 物件の階数
  • 賃料
  • 諸費用(管理費等)
  • 入居時費用(敷金礼金)
  • レイアウト(1LDK,2LDK等)
  • 広さ(平方メートル)
中古マンションの取引情報
  • 最寄り駅
  • 駅からの距離
  • 築年数
  • レイアウト(1LDK,2LDK等)
  • 広さ(平方メートル)

データを比較すると



 データから計算すると、わりと感覚と一致しました。以前住んでいた西長堀の平方メートルあたりの平均価格が32万円。賃料が2,132円となり利回りが8%となります。これに対して、私が幾つか見たところは、軒並み6%台でした。(と言っても、6%後半が多く思ってたほど悪くなかったです。)

駅名 平均販売価格 平均賃料 平均利回り
千駄木 590000 3052 6.21%
浅草 510000 2728 6.42%
和光市 370000 2098 6.80%
両国 480000 2770 6.93%
西長堀 320000 2132 8.00%

 こうやって並べると、東京圏ばかりが利回りが悪いように思えますが、関西圏でも6%くらいであれば幾らでもあります。たまたま私が住んでいたところは、悪くないところだったというところでしょうか。

データから見えてくること



 こういったデータを眺めていると、普通の生活者目線からは違ったものが見えてきます。今までは、東京は家賃が高くて、既に物件を持っている人はガッポガッポ儲けているのだと思っていました。しかし、この数字を見る限りは、高い物件を低い利回りでまわして、結構リスクをとっているようにみえます。(利回りが低いのは、空き室リスクが低いからという理由もありますが。)

 賃貸として借りるにしろ、マンションを買うにしろ、単純に賃料や販売価格の絶対値で見るのではなく、この辺りを相対化すると色々参考になるのではと思います。まだやっていませんが、築年数や駅からの距離といったデータがあるので、販売価格や賃料の推移を10年単位くらいで追っていくと面白いものが見えてくるのではないでしょうか。

まとめというか抱負



 今回わりと面白いデータが集まったので、ちゃんと統計的に分析してみたいと思います。最近、「手を動かしながら学ぶ ビジネスに活かすデータマイニング」というRを使って統計分析するという面白い本をかったので、これを片手にRの勉強してみたいと思います。
 あと、どうやってデータ集めたら良いのという場合は、「Rubyによるクローラー開発技法」がお勧めです。5章「目的別のクローラーを作成する」の5-19に不動産情報を取得するという1節を書いています、というステマで終わらせていただきます。


See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次



Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

手を動かしながら学ぶ ビジネスに活かすデータマイニング

手を動かしながら学ぶ ビジネスに活かすデータマイニング

個人ブログの存在感は、自分が思っているより大きいのかもしれない。或いは書籍の流通の話

 何度か紹介しましたが、先日「Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例」が発売されました。全国の書店の店頭に、ぼちぼちと並び始めています。
 と言いたいところですが、タイトルから解るとおりかなりニッチというかマニアックな内容の本で、初版3,000部です。と言うことで、それなりの規模の書店ではないと置いていません。感覚的にいうと、コンピュータの棚で2〜3棚以上ある規模でないと置いているところを見たことがないです。私自身の観測範囲では、池袋のジュンク堂とリブロ、有楽町の三省堂書店です。他の目撃情報だと、紀伊國屋や丸善、有隣堂、或いは、秋葉原の専門店のような所に置いてあるようです。複数フロアにわかれている、いわゆる大型店か専門店ですね。
f:id:dkfj:20140823150239j:plainf:id:dkfj:20140823150403j:plain

書店の規模と配本数



 軽く調べてみたところ、全国の書店数は14,000店足らずで、その内で500坪以上の大型店は500店程度の模様です。初版3,000部の場合、大型店のところに平均5冊づつ配本して2,500部。後は、Amazonや楽天のようなオンラインショップで販売と考えると、何となくマッチするような気がします。そう考えると気がつくのが、大型店といえども1店舗あたりの売上は5冊に過ぎないという点です。

Amazonの存在感



 そんな中で存在感を放つのが、Amazonです。発売の1週間前にちらっと聞いた話だと、予約だけで150冊ほどあったそうです。それ以外にどれくらい入荷しているかは推測の域ですが、数十冊くらいは入れているのでしょうね。その店を考えると、Amazonは恐らく大手の紀伊國屋やジュンク堂と同等規模或いはそれ以上の存在感です。
 ネットで転がっていた情報では、ジュンク堂池袋本店で30冊入荷。大阪の方は、知人情報によると10冊程度の入荷だったっぽいです。残りの全国に30店舗程あるようなので、5冊づつとしても150冊。合計で200冊ほどになるのではと思います。

5冊という数字と個人ブログ



 Amazonの話に戻すと、150冊予約の時点で、そのうち私のブログ経由で50冊が予約なのですね。私のブログはアフィリエイトを埋め込んでいるので、どれくらい売れたのか把握できるようにしています。今回は自著ということもあり、過去最大級に売れました。(ちなみに、過去最も売れたのは伊藤直也さんの入門Chef Soloです。)
 個人のブログを書店になぞらえると、この数十冊というレベルは大型店並の数字です。数十冊ではなくても5冊と考えても、実はそれなりの存在感です。昨年1年間の自サイトでの売上を見ると、5冊以上売れているのはそれなりの数があります。昨年販売の本もありますが、かなり昔のニッチな本も多数あります。「Spidering hacks」であったり、「国をつくるという仕事」などです。
 最終的には、これらはAmazonが売っている訳なので、出版社側から見るとAmazonの影響力ということになります。しかし、その実、個人の影響で売れているというのは多数あります。ブログやSNSをはじめとする個人メディアの力は、(Amazonというプラットフォームがあってこそですが)実は個々人が思っているより大きいのかもしれません。
 ここでいう個人メディアというのは、月何十万アクセスもあるセミプロの話ではありません。自分の気に入った本を紹介して、1冊2冊うる普通の個人の話です。そういった小さな力が、ロングテールで考えると無視できなくなっていて、それが即ちAmazonの力になっているのだと思います。

感想



 個人の観測範囲の話で裏付けもしていないですが、今回の出版にともない気がついた点です。何事も自分でやってみると、今まで考えもしなかった事や気がついていなかった事が見えてくるので面白いですね。
 次回、もう少し数値的な裏付けとって考えてみようと思います。そんな際の情報収集に、この本が良いですよとステマで終わらせて頂きます。エンジニア以外にもWebマーケティングをしている人に、好評のようです。
 あと、ポップって置かせて貰えないものですかね?誰か教えてください。

See Also:
『Rubyによるクローラー開発技法』を書きました
Rubyによるクローラー開発技法の目次


参照:
https://www.jpoksmaster.jp/Info/documents/top_transition.pdf
書店数とその坪数推移をグラフ化してみる(2013年)(最新) - ガベージニュース
書店数、確実に減少中…書店の減り具合をグラフ化してみる - ガベージニュース


Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法の目次

 るびきちさんとの共著である「Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例」が今週末(8/23,24)くらいから、本屋さんの店頭に並ぶようです。経緯や執筆スタイルなどは別途まとめたいと思いますが、ようやくここまで辿り着けたというところです。

 AmazonとSBクリエイティブさんのページを見ても、8/21現在では詳細の目次が無いようです。手元にあったデータを貼り付けておきますので、参考にしていただければと思います。


Rubyによるクローラー開発技法 目次


Chapter 1 10分クローラーの作成
 1-1 イントロダクション 2
  1-1-1 クローラーとは 2
  1-1-2 Rubyとは 2
 1-2 クローラー 「GNU Wget」3
  1-2-1 Wgetとは 3
  1-2-2 インストール 4
  1-2-3 Wget の簡単な使い方 7
  1-2-4 クローラーとしての Wget 8
 1-3 クローラーを作るにあたってのRubyの基礎 12
  1-3-1 Rubyの特性 12
  1-3-2 文字列処理 16
  1-3-3 正規表現 19
  1-3-4 ファイルを開く 23
 1-4 Rubyでテストサーバを立てる 25
  1-4-1 標準ライブラリ「WEBrick」でお手軽httpd 25
  1-4-2 URLから規則的な内容のページを表示する 26
  1-4-3 Wgetのオプションを検証する 30
 1-5 超簡単! 10分で作るクローラー 34
  1-5-1 概略 34
  1-5-2 HTMLを解析する 35
  1-5-3 Wget を Ruby から呼ぶ 39
  1-5-4 最新記事をテキストで出力する 40
 1-6 クローラーを拡張する 42
  1-6-1 open-uriに対応させる 42
  1-6-2 RSS2.0 での出力に対応させる 43
  1-6-3 リファクタリング 47
  1-6-4 RSS サーバにする 51

Chapter 2 クローラー作成の基礎
 2-1 クローラーの目的と構造56
  2-1-1 クローラーの目的 56
  2-1-2 クローラーの構造 56
  2-1-3 クローラーが利用するライブラリ 60
  2-1-4 Ruby 製のクローラー 62
 2-2 Anemoneを利用する 66
  2-2-1 Anemoneの機能 67
  2-2-2 Anemoneの内部構造 71
  2-2-3 Anemoneの実行モデル 72
 2-3 Anemoneのインストール(Windows編) 74
  2-3-1 Nokogiriのインストール 74
  2-3-2 Anemone のインストール 75
  2-3-3 コンパイルツールを利用してビルドする場合 76
 2-4 Anemoneのインストール(Mac編) 78
  2-4-1 libxmlとlibxslt、libiconvのインストール 78
  2-4-2 Anemone のインストール 80
 2-5 基本的なクローラーを作成する 81
  2-5-1 Amazonからジャンルごとのベストセラーを取得する 81
  2-5-2 クローリング機能の作成 86 2-5-3 スクレイピング機能の作成 91
  2-5-3 RSS を利用する方法 98
 2-6 クローリングができない場合の対処法101
 2-6-1 クローリングができない原因 102
 2-6-2 プロキシサーバ 102
 2-6-3 サイト側にアクセス拒否されるケース104
 2-7 行儀のよいクローラーを作るには109
 2-7-1 robots.txt 110
 2-7-2 サイトの利用規約 112
 2-7-3 取得したデータの取り扱いと著作権 113
 2-7-4 Web サイトのリソース圧迫と業務妨害 113
 2-7-5 クローラーと API 114
 2-8 ブラウザタイプのクローラー114
 2-8-1 画面テストツール 115
 2-8-2 ブラウザタイプのクローラー作成の準備116
 2-8-3 ログインが必要なページの対処 124
 2-8-4 JavaScriptを多用しているページの対処134
 2-8-5 足りない機能を補完する138

Chapter 3 収集したデータを分析する
 3-1 収集したデータを分析する148
 3-1-1 正規表現と構文解析 148
 3-1-2 日本語の文字コードと日本語処理 149
 3-2 HTML解析と正規表現149
 3-2-1 Ruby における正規表現の実装150
 3-2-2 正規表現のオプション154
 3-2-3 正規表現のパターン 155
 3-3 文字コードの対処法156
 3-3-1 Ruby における文字コードの取り扱い 156
 3-3-2 Nokogiriと文字コード 160
 3-3-3 Anemone と文字コード 161
 3-4 RSSの解析163
 3-4-1 名前空間(Namespace)164
 3-4-2 RSS 1.0 164
 3-4-3 RSS 2.0 166
 3-4-4 Atom 1.0167
 3-4-5 RSSAtom の解析168
 3-5 HTMLの解析172
 3-5-1 Nokogiriのクラス構造 172
 3-5-2 Nokogiri、XPath の使い方 172
 3-5-3 中心的な 3 つのクラス 175
 3-5-4 簡単な XPath の抽出方法183
 3-6 自然言語を使った日本語の処理187
 3-6-1 形態素解析と特徴語抽出187
 3-6-2 日本語処理 188

Chapter 4 高度な利用方法
 4-1 データの保存方法198
  4-1-1 データストレージ 198
  4-1-2 ファイルに保存 198
  4-1-3 データベースとの連携200
  4-1-4 SQLite3に保存 201 4-1-5 MongoDB に保存 206
  4-1-5 MySQL に保存213
 4-2 クローラーの開発とデバッグ方法 219
  4-2-1 Ruby プログラムのデバッグ方法 219
  4-2-2 開発プロキシを使ったクローラーの開発224
 4-3 クローリングとスクレイピングの分離228
  4-3-1 スクレイピング部分の分離 228
  4-3-2 分離度を上げる 229
 4-4 クローラーを効率的に動かすには232
  4-4-1 多重度を上げる 232
  4-4-2 タイムアウトの調整 236
  4-4-3 HTTP Compressionによる通信データの圧縮237
  4-4-4 未取得のデータのみ取得する 238
  4-4-5 エラーコードに対する処理 238
 4-5 Anemoneのオプション一覧240
  4-5-1 Anemone のオプション 240
  4-5-2 ストレージオプション(storage)240
  4-5-3 クローリング間隔オプション(delay)241
  4-5-4 巡回戦略オプション(skip_query_strings)241
  4-5-5 探索戦略オプション(depth_limit)241
 4-6 APIを利用した収集242
  4-6-1 API を利用するメリット242
  4-6-2 Amazon Product Advertising API243

Chapter 5 目的別クローラーの作成
 5-1 Google の検索結果を取得する248
  5-1-1 Google の検索結果のスクレイピング 248
  5-1-2 Gem を利用する 250
  5-1-3 Google Custom Search API を利用する 251
 5-2 ブログへのクローリング 256
  5-2-1 個別ブログの記事取得256
  5-2-2 本文抽出260
 5-3 Amazonのデータを取得する263
  5-3-1 商品 ID「ASIN」263
  5-3-2 商品 ID の取得 263
  5-3-3 商品データの取得 265
  5-3-4 新着ランキングセール 266
 5-4 Twitter のデータ収集 267
  5-4-1 HTML からのクローリング 267
  5-4-2 Twitter の API272
  5-4-3 Twitter REST API 272
  5-4-4 Twitter Streaming API277
 5-5 Facebookへのクローリング278
  5-5-1 Facebook Graph APIとFQL278
  5-5-2 認証が必要ないFacebook Graph API 279
  5-5-3 認証が必要な Facebook Graph API 280
 5-6 画像を収集する285
  5-6-1 Flickr からクローリングで収集する 285
  5-6-2 Flickr API 287
 5-7 YouTube から動画を収集する 290
  5-7-1 動画の URL を収集する 290
  5-7-2 動画をダウンロードする291
 5-8 iTunes Store の順位を取得する 293
  5-8-1 iTunes Storeのランキング293
  5-8-2 カテゴリ ID とランキング種別 296
  5-8-3 iTunes アプリのランキングを取得する 297
 5-9 Google Playの順位を取得する299
  5-9-1 Google Playのランキング299
  5-9-2 Google Playのクローラーライブラリ 301
  5-9-3 カテゴリ ID とランキング種別 302
 5-10 SEOに役立てる304
  5-10-1 検索順位を収集する 304
  5-10-2 被リンク 305
 5-11 Wikipediaのデータを活用する308
  5-11-1 Wikipedia からのクローリングとデータ 308
  5-11-2 Wikipedia のカテゴリの活用 309
 5-12 キーワードを収集する311
  5-12-1 Wikipedia のタイトル 311
  5-12-2 はてなキーワード311
  5-12-3 Google Suggest API 313
 5-13 流行をキャッチする314
  5-13-1 瞬間的なトレンドをキャッチする314
  5-13-2 長期的なトレンドをキャッチする319
 5-14 企業株価情報を収集する321
  5-14-1 証券コード一覧を取得する 321
  5-14-2 企業情報および当日の株価を収集する 322
  5-14-3 株価の時系列データを収集する325
 5-15 為替情報金融指標を収集する327
  5-15-1 国債金利 327
  5-15-2 為替情報 331
  5-15-3 その他の経済指標332
 5-16 郵便番号と緯度経度情報を取得する333
  5-16-1 Google Maps APIによるジオコーディング333
  5-16-2 郵便番号から緯度珪素の検索334
  5-16-3 郵便番号と経度緯度データによる可視化 335
 5-17 新刊情報を収集する336
  5-17-1 Amazonの新刊予約の検索パラメータ 336
  5-17-2 新刊情報を取得する 338
  5-17-3 APIを利用する 340
 5-18 荷物を追跡する342
  5-18-1 ヤマト運輸の荷物を追跡する 342
  5-18-2 Google Calendar に登録する 3434
 5-19 不動産情報を取得する346
  5-19-1 レインズからのデータ取得 346
 5-20 官公庁のオープンデータを活用する349
  5-20-1 提供されているデータ一覧 350
  5-20-2 次世代統計利用システムのAPI登録 351
  5-20-3 次世代統計利用システムの API の利用352
 5-21 新聞の見出しを集める355
  5-21-1 取得対象とプログラムの構造 355
  5-21-2 親クラスの実装355
  5-21-3 各社別の記事URL の抜き出し 356
  5-21-4 呼び出し元の実装357
  5-21-5 ページング機能の追加 358

Chapter 6 クローラーの運用
 6-1 サーバサイドで動かす362
  6-1-1 サーバで動かすメリット362
  6-1-2 サーバへのインストール363
  6-1-3 Linuxのコマンド 372
 6-2 定期的にデータを収集する375
  6-2-1 Crond でスケジューリングを登録する375
  6-2-2 Crond で動かす際の注意点 377
  6-2-3 差分を検知する 378
  6-2-4 時系列で表示する 380
 6-3 収集結果をメールで自動送信する384
  6-3-1 どういった内容を送るのか 384
  6-3-2 Gmail を使って結果通知する385
  6-3-3 Amazon Simple Email Service(SES)を使って結果通知する390
 6-4 クラウドを活用する396
  6-4-1 AWS のサービス 396
  6-4-2 クラウド上のサーバを利用する 398
  6-4-3 クラウド上のストレージを利用する 402
  6-4-4 Amazon SNS で通知する 407
 6-5 さらなる高速化の手法410
  6-5-1 非同期処理 410
  6-5-2 分散処理415
 6-6 変化に対応する419
  6-6-1 検知方法419
  6-6-2 修正&再処理 422
 6-7 クローラーとそれに付随する技術424
  6-7-1 データを活用する方法425
  6-7-2 データの可視化 425
  6-7-3 データマイニング 426

See Also:
『Rubyによるクローラー開発技法』を書きました

参照:
新刊『Rubyによるクローラー開発技法』2014/08/25発売! | るびきち×Emacs
SBクリエイティブ:Rubyによるクローラー開発技法

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

KimonoLabsと今後のサービスのあり方のはなし

f:id:dkfj:20140813182433p:plain


 別記事にも書きましたが、第2回Webスクレイピング勉強会@東京に参加してきました。そこで注目のサービスであるKimonoLabの中の人であるPratap Ranadさんの話を聞いてきました。シンプルながら明確なメッセージで、非常に感銘を受けました。

KimonoLabsのミッション



 KimonoLabsの始まりは、あるサービスを作ろうとして航空会社ごとのデータを取得しようとしたことが始まりのようです。しかし、航空会社ごとにWebスクレイピングするのは手間で、非常に大変だったそうです。サイト側がAPIを提供すれば解決なのですが、APIを提供している会社は0.0005%に過ぎないそうです。またセマンティックWebにすれば良いという話もありますが、あれはデータを提供する側が努力する必要があり、そもそも構造として間違っていたとのことです。KimonoLabsはこの構造を逆転させ、データを取得する方が少し労力を提供すれば良い構造にしたとのことです。また、誰かがKimonoLabsを使ってスクレイピングのAPIを作ることにより、他の人でも利用できるようになり、結果としてデータを構造化させることができるとのことです。
 私は、セマンティックWebの失敗の理由について、非常に共感しました。いろいろな職場でも議論されてると思いますが、プロジェクト等の経験などがどうして共有されないのかという問題と一緒だと思います。情報を取得する方ではなく、提供する側に努力させても、インセンティブがないのです。受益者側の働きかけに構造を変える必要があるのです。この辺り、KimonoLabsの狙いは非常に素晴らしいと思います。

KimonoLabsの由来



 そもそもKimonoLabsおよびKimonoの名前の由来は何なのでしょうか?それは、「Open the kimono」というビジネス上のスラングに由来するようです。参加者一同、Open the kimonoと聞いたとたん、頭の中は悪代官様しか出なかったのですが、(ビジネス上の)ややこしい問題を紐解くとか整理するといったような意味があるようです。もっとも、サービスに名前をつける必要があったので、思いついたのをつけたという事実もあるようです。

KimonoLabsの収益源



 無料で充分使えるKimonoの収益源の話です。私も気になってたのですが、企業側にAPI提供を手助けすることで収益化を図っているようです。つまり、一般の人が用途の応じてサイトからデータを収集するのではなくて、サイトの運営者側がKimonoを利用してデータを提供するということです。この構造は、一番驚きました。実際、Fortune500などの有力企業に多数採用されているようです。

感想



 先日の記事にも書きましたが、クローラーを作る人やWebスクレイピングする人は、それ自体が目的ではなくデータを集めて何かをするのが目的です。当然ながら、データを収集する為の労力は最小限にするのがよいでしょう。その点を考えると、KimonoLabsが目指す点は、非常に素晴らしいと思います。実際、スクレイピングする人の9割は、Kimonoを利用すれば解決するでしょう。もちろん、Kimonoでは解決できない問題も多数あります。だからと言って、オーダメイドのスーツのようなものを万人に勧めるのは間違いです。既成品では満足できない人にこそ、オーダーメイドが必要なのです。
 SIerに身をおく自分としては、今後のIT市場の方向性がはっきり見えてきて正直怖い部分もあります。一方で便利なサービスが容易に利用できて、楽しみな側面があります。それらを組み合わせて、何を実現するのか。その辺りを考えていこうと思います。
 最後に、半年かけて手掛けてきたクローラー本の発売を目前に控えた自分としては、この発言が一番印象的でした。
私も同感です。


See Also:
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
「第2回Webスクレイピング勉強会@東京」に参加&発表してきました
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました


参照:
マウスでなぞるだけで、あらゆるデータ取得をAPI化——Y Com出身のスタートアップKimono Labsにインタビュー - THE BRIDGE(ザ・ブリッジ)
第2回Webスクレイピング勉強会@東京 に参加してきた #東京スクラッパー | Developers.IO
第2回Webスクレイピング勉強会@東京(全3回) - connpass
2014/08/17 第2回Webスクレイピング勉強会@東京 #東京スクラッパー - Togetterまとめ

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

「第2回Webスクレイピング勉強会@東京」に参加&発表してきました

 前回に引き続き第2回Webスクレイピング勉強会@東京に参加し、発表もしてきました。今回は、ブログやサイトから本文部分をどうやって抽出するのかというテーマです。ブログの本文抽出とは、ヘッダーやフッダー、サイドメニューなど情報として不要な部分を排除して、本文部分だけを抜き出す手法です。HTMLのタグを解析するルールベースと、自然言語処理を利用して本文らしさを抽出するヒューリスティックな方法の2つについて、簡単に説明しています。

解説と質疑応答



 そもそもブログやサイトの本文を抽出する目的としては、2つくらいあるのではと思います。1つは、その記事そのものを読みたい場合。もう1つは、記事を統計解析などの元データとして利用したい場合があると思います。前者の場合は記事全文がないと意味がないし、後者は必ずしも記事全文は必要ないという前提になります。
 そういった前提の場合、どういった手法が適切なのかというテーマです。記事全文を正確に取得する場合は、HTMLのタグを解析してルールベースでやるべきです。しかしこの場合は、ブログやサイトごとにHTMLの構造が違うので、ブログ種別ごとに作りこむ必要があり対応に手間がかかります。一方で記事全文が必ずしも必要がない場合は、本文らしさを抽出するヒューリスティックな方法が良いと考えています。
 本文らしさの抽出の方法としては、原理の簡単な説明と既存のモジュールを紹介しています。説明忘れてたのですが、Rubyの本家ExtractContentは、Rubyのバージョンによる正規表現エンジンの違いから、1.8系まででしか使えません。1.9以降で利用する場合は、Fork版を利用する必要があります。ご注意ください。

・ブログのユーザ属性の取得方法について
 「これ間違いなくおじさんだ!」が解るのかについて。どの話の流れからか忘れましたが、ブログを書いている人の属性を取得するという話になりました。私としては、2つくらいの方法があるかと考えています。1つ目はブログのプロフィールに載せられているTwitterやFacebookから属性(男性/女性、10代、20代、30代…)などを取得する。もう一つは、予め素性がはっきりしている人のデータを集めて教師データとして、クラスタリングする方法などが考えられます。ただジェンダーや性別を特徴づける言葉は曖昧なので、後者の方法は中々難しいのではと思います。一方で、関心の範囲でクラスタリングするのは比較的可能だと思います。

感想



 当日は体調最悪で、発表中もボーっとしてて質疑応答の記憶もロクに無いです。申し訳ないです。KimonoLabsさんの発表まで何とか聞いて、途中で断念して帰りました。Kimonoについては色々書きたいことがあるので、改めてエントリーをあげようと思います。Kimonoの中の人と話せなかったのが残念でなりません。
 あと当日も宣伝していましたが、「Rubyによるクローラー開発技法」が遂に今週末に発売です。早いところで8/23くらいから並びだすのではという話です。もし買ったかたおられましたら、感想頂ければありがたいです。どんな厳しい言葉にも耐えられるハートの準備中です。

See Also:
RubyでWebスクレイピングの話をしてきました。第1回Webスクレイピング勉強会@東京
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました
KimonoLabsと今後のサービスのあり方のはなし


参照:
第2回Webスクレイピング勉強会@東京 に参加してきた #東京スクラッパー | Developers.IO
第2回Webスクレイピング勉強会@東京(全3回) - connpass
2014/08/17 第2回Webスクレイピング勉強会@東京 #東京スクラッパー - Togetterまとめ


Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例