Elaboration in, Garbage out

Twitt*r ではメモできない何かそれ的なモノ・コトを

クローラー+α

泳ぎます,Web の中で.

この記事について

仕事で Web をランダムウォーク(ランダムクロール?)をしていたので,自力でクローラーを作りたくなった.Web から取得したページを解析*1したいから,スクレイピンングすることも必要だ*2.あと,データを貯めるためにはデータベースも必要.
とりあえず,どんな言語で,何があって,どんな情報があるのか,まで調べた.日本語の問題はダイジョブだろう.


著作権の問題あるよね(´・ω・`)

ちょっと前まではその通り.平成 21 年の著作権法改正により,利用目的が「電子計算機による情報解析」であれば大丈夫,問題ない.著作権法 47 条の 7 には,

著作物は、電子計算機による情報解析(多数の著作物その他の大量の情報から、当該情報を構成する言語、音、影像その他の要素に係る情報を抽出し、比較、分類その他の統計的な解析を行うことをいう。以下この条において同じ。)を行うことを目的とする場合には、必要と認められる限度において、記録媒体への記録又は翻案(これにより創作した二次的著作物の記録を含む。)を行うことができる。ただし、情報解析を行う者の用に供するために作成されたデータベースの著作物については、この限りでない。

とある.とりあえず,詳しいことは「平成 21 年著作権法改正のポイント」とかいうキーワードで調べれば参考になる pdf でも出てくるんじゃないのかな〜(*゚∀゚)

ご存知の方も多いと思うけど,著作権というのは,著作物{「思想又は感情を創作的に表現したものであつて、文芸、学術、美術又は音楽の範囲に属するもの」(著作権法第二条)}に対する著作者の権利を指しているので,電子計算機による情報解析の結果を公表するのは,(著作物を表示したりプライバシーの問題に引っかかったりする,というのを除けば)OK だと思う.

今思ったけど,情報を解析した結果を元に未来を「予測」することは「その他の統計的な解析」に該当するのかがわからない,多分大丈夫だと思う.教えて詳しい人←.

で,肝心のクローラーはどうなのよ

総合評価*3

てきとーに手動で Web スクレイプした結果をまとめるとこんな感じ.すごく……主観評価です.

言語 ライブラリの機能(クローラー ライブラリの機能(スクレイパー とっつきやすさ
Java
Python
Ruby

Java

Apache Nutch をはじめ,けっこー洗練されたものが多いという印象.ただ,(2010 年時点で)英語の資料もままならない状態らしい.

参考;
クローラー開発、まとめリンク | Webアプリの開発諸々
Web scraping with nutch solr
Large scale crawling with Apache Nutch

Python

Scrapy が非常に高機能らしい.ただ,Scrapy のスクレイピング機能が使いづらいかつアーキテクチャが微妙らしく,他のライブラリ(beutifulsoup,pyquery,lxml etc)を使ってもいいかもしれないし使えないかもしれない(丸投げ).日本語の情報も豊富でとっつきやすいみたいです.

参考;
PythonによるWebスクレイピング入門
asyncioを用いたpythonの高速なスクレイピング | POSTD

Ruby

いろんなライブラリがあって,Ruby のほうがクローラー開発が活発のよう*4スクレイピングに関しては,Nokogiri がデファクトスタンダードになっているらしい.生 HTML データを MongoDB に突っ込むのもの,いろいろライブラリ使ってほほーんとできそうで,日本語の情報も豊富で,書籍も出ているよう.

参考;
Rubyで作るクローラー Ruby crawler
Rubyとか使ってクローリングやスクレイピングするノウハウを公開してみる! - 病みつきエンジニアブログ
RubyのNokogiriを使ってサイトをスクレイピングする - Think Big Act Local

結論

そうだ,Rubyクローラーつくろう.

*1:食べログで言うならば,どの部分にユーザーの点数が書かれているか,とか

*2:パーサーとかインデクサーとかいった用語もあるけど,まだ調べてない

*3:PHP もあるが,PHP は触ったことないので除外←

*4:Google 検索で”Ruby クローラー”だと 77k 件,"Python クローラー" だと 20k 件ヒット