MongoDBにxvideoのデータを突っ込む
概要
データ解析に興味を持ち始めたので、素材として、xvideoのデータを突っ込んだ。
特に、特に、疾しい気持ちがあったわけではなく、本当に、ぱっと、浮かんだのがこれだっただけ。。
手順
xvideoのCSVデータを準備
XVIDEOS' Entire Video Database のDownload XVIDEOS.COM database.をクリックして、待つ。
解凍する。
$ unzip xvideos.com-db.csv.zip
ダブルクォートをシングルクォートに変換する。
$ sed -e s/\"/\'/g xvideos.com-db.csv > quoted-xvideos.com-db.csv
データのフォーマットはこんな感じになる。(ところどころ、マスクしておいた。)
http://www.xvideos.com/video********/10870727_1549485388642969_2084531139_n;10870727_1549485388642969_2084531139_n;38 sec;http://img100-487.xvideos.com/videos/thumbs/6e/71/4b/********************************************/6e714b55911f88b86a7e2ed464860cac.1.jpg;<iframe src="http://flashservice.xvideos.com/embedframe/********" frameborder=0 width=510 height=400 scrolling=no></iframe>;ouiuiyui,dvdsf,gdsfg;Unknow
CSVからmongoDBにつっこむ
Gemfileを用意して、
source "https://rubygems.org" gem "mongo" gem "bson_ext"
bundle install する。
$ bundle install --path vendor/bundle
後は、こんなスクリプトを用意して、バックグラウンドで回す。
#!/usr/bin/env ruby require 'bundler/setup' require 'csv' require 'mongo' csv_path = "/Users/togattti/Downloads/quoted-xvideos.com-db.csv" connection = Mongo::Connection.new db = connection.db('sample') col = db.collection('bokuno_xvideo') default_options = {:col_sep => ";"} id=1 CSV.foreach(csv_path, default_options) do |row| begin col.insert({_id: id,url: row[0], title: row[1], min: row[2], thumbnail: row[3], embed_url: row[4], tag: row[5], genre: row[6]}) id += 1 rescue => e puts e next end end
待っていたら、エラーが出た。
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/csv.rb:1848:in `block (2 levels) in shift': Unquoted fields do not allow \r or \n (line 72864). (CSV::MalformedCSVError)
データがおかしいのか、わからないけど、時間も無かったので、csv.rbのraiseを吐き出す部分を コメントアウトして対処した。
ちなみに、CSVのクォートを変換しておかないと、しょっぱなから、エラーが出る。
CSV::MalformedCSVError (Illegal quoting in line 1.)