togatttiのエンジニアメモ

過度な期待はしないでください.

MongoDBにxvideoのデータを突っ込む

概要

データ解析に興味を持ち始めたので、素材として、xvideoのデータを突っ込んだ。

特に、特に、疾しい気持ちがあったわけではなく、本当に、ぱっと、浮かんだのがこれだっただけ。。

手順

  • xvideoのCSVデータを準備
  • CSVからmongoDBにつっこむ

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.)