丸の内MongoDB勉強会に参加してきた
丸の内MongoDB勉強会 : ATND に参加してきました(17時から開始はさすがに間に合わず30分ほど遅刻...)。
MongoDBは初めて触りましたが、各プラットフォームのバイナリも用意されていて、インストールも展開するだけと簡単。初心者に優しいですね。これなら簡単に勉強を始めれそうだ。実際、プログラミング経験がほとんど無い方も参加されていたのだが、ハンズオンでMongoDBを動かせていたようだし。
しかし私は使用していたPCからネットワークの問題かgemがうまく動かず、MongoDB-Ruby driverを使用したサンプルを動かせず。。。というわけでSphinxビルド用にPythonを入れていたのでそちらで挑戦してみた。
PythonにもRubyのようにクライアントライブラリがあるようで、それを使えばほとんど同じようなコードで書けますね。
import pymongo import re import urllib2 title = re.compile(r'<h1>(.*)</h1>') author = re.compile(r'<tr><td>By:</td><td><b>(.*)</b></td></tr>') year = re.compile(r'<tr><td>Year:</td><td><b>(.*)</b></td></tr>') page = re.compile(r'<tr><td>Paperback:</td><td><b>(.*) pages</b></td></tr>') size = re.compile(r'<tr><td>File size:</td><td><b>(.*)</b></td></tr>') format = re.compile(r'<tr><td>File format:</td><td><b>(.*)</b></td></tr>') url = re.compile(r'href=\"/go/(.*?)[\'\"]') def parse_html(html): scan = lambda r: r.search(html).group(1) return { "title": scan(title), "author": scan(author), "year": scan(year), "page": scan(page), "file": { "size": scan(size), "format": scan(format), "url": "http://it-ebooks.info/go/" + scan(url) } } conn = pymongo.Connection() db = conn.bookgetter coll = db.book coll.remove() for i in range(1, 11): html = urllib2.urlopen("http://it-ebooks.info/book/%s/" % i).read() book_data = parse_html(html) # print book_data coll.insert(book_data)