AKB428は荒野を目指す

秋葉原で働くエンジニアなブログ

世界最強のエロゲサイト、Getchu.comをNokogiriでスクレイピングする方法

f:id:rakuda00:20150306002305p:plain

 

 

私が、最も利用し世界で一番優れていると思うサイトはもちろんAmazon様なのですが、では「二番目に尊敬するサイトは?」と言われると間違いなく「getchu.com」を上げると思います。http://www.getchu.com/top.html

エロゲを全く知らない人にわかりやすく説明すると「エロゲ界のアマゾン」がgetchu.comになります。

 

エロゲ以外も取り扱ってはいますが、基本的にはエロゲ、エロアニメメイン。

クールジャパンの誇るHENTAI文化の一旦を担っており、海外のオタク関連のサイトは頻繁にgetchu.comのリンクを多用しているため、日本より海外のアクセスが多いのでは?と心配してしまうぐらいの大人気サイトです。

 

つまり、エロゲDBとしては日本、いや世界最強のサイトであり、ここのデータを使えばマイ、エロゲDBシステムの構築も不可能ではありません。

本当はgetchu.comがREST APIでも提供してくれればいいんですが、中世ジャップランドのサイトにそこまで求めるのは横暴でしょう。

 

そこで、REST APIでの取得を諦めた場合の選択肢としてHTMLスクレイピングという古風な手法を取らざるをえません。

そこで今回はRuby HTMLスクレイピングツールとして有名なNokogiriモジュールさんの力を借りて、getchu.comの月別販売ページから指定した月の発売エロゲタイトル一覧を取得するスクリプトを書いてみました。

 

HTMLスクレイピングスクリプトを書くときは以下のようなアプローチととります。

  1. ブラウザのデベロッパーコンソールでHTML構造の解析。
  2. 解析したHTMLに対してCSSセレクタ正規表現で取得したいデータ部分だけ抜き出し
  3. 抜き出したデータをファイルに出力したり、JSON化したり、DB化する

 

f:id:rakuda00:20150306001636p:plain

上記はFirefoxのFirebugsでHTML構造を表示してるところ。

class="category_pc_b" に 作品のタイトルが埋まっていそうなのがなんとなくわかる。

実際のコードは以下のようになる。

get_monthly_title_list.rb v1.0

若干endの嵐なのがきもいが気にしない(´・ω・`)

シェルでこんな感じで実行できます。

(master)$ bundle exec ruby get_monthly_title_list.rb 'http://www.getchu.com/all/month_title.html?genre=pc_soft&gage=all&year=2015&month=5'
http://www.getchu.com/all/month_title.html?genre=pc_soft&gage=all&year=2015&month=5
絶対階級学園 〜Eden with roses and phantasm〜
ALIA’s CARNIVAL! Flowering Sky 初回限定版
Angel Beats! -1st beat-
Re;Lord 〜ヘルフォルトの魔女とぬいぐるみ〜 シリーズ導入価格版
Re;Lord 第二章 〜ケルンの魔女と黒猫〜
love,VAMPIRE FLOWERS 初回限定版
あやかしコントラクト
すみれ
な妹き!
ピュア×コネクト 初回限定版
プレイ!プレイ!プレイ!屍 通常版
プレイ!プレイ!プレイ!屍 限定版
メイプルカラーズHHH クラス全員俺の嫁! 通常版
メイプルカラーズHHH クラス全員俺の嫁! 豪華限定版
・・・・・


私は、抜き出した作品リストをTwitterのStreamingAPIの検索キーとして使いたいのでカンマで連結したものも表示してます。

今回、ハマったポイントは以下

◯その1

Nokogiriぐぐると大抵Nokogiri::XMLのほうが出てくるのでコピペしてHTMLを解析しようとしてもエラーにはらず中途半端に解析が行われるので原因がわからず涙目。

 

◯その2

NokogiriのサンプルでのHTTP処理につかわれる open-uriは引数のURLにHTMLパラメーターがついていると無視するみたいなので涙目。httpclientモジュールはクエリーを別引数にハッシュで渡さないといけないので涙目。今回のように引数にhttpパラメーターつきでURLを渡したい場合はNet::HTTPは便利

 

◯その3

getchu.comはおそらく昔からのしがらみでこの21世紀にもなってeuc-jpを使ってるので、エンコードには注意しないとスクレイピングは大変そう。

 

スクレイピングする際は、サイトに迷惑がかからないように開発中はHTMLを保存しておいてそれを読み込みつつテストするなどTPOをわきまえた行動が求められます。

マナーを守って正しくスクレイピングしましょう!

 

今回のスクリプトは以下に配置しています

https://github.com/project-orgel/getchu_com_scraping_tools

 

 

 

 

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

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