池袋の老舗店からデータをスクレイピングする話

池袋紳士 では、登録している風俗店のウェブサイトの出勤表を参照して、出勤している女の子の一覧を表示しております。

これは僕が勝手に取得して表示している情報で、お店がデータを入力してくれているわけではございません。

ウェブサイトのHTMLを取得して、その中から名前やスリーサイズなどの情報を抽出しております。いわゆるスクレイピングでございます。

現在、40店舗分ほどの出勤情報を表示しています。40店舗分の出勤情報の抽出というとかなりの開発規模にも見えますが、実はそれほどでもございません。

最初の数店舗はかなり時間をかけて開発いたしましたが後はかなりスムーズに開発することが出来ました。速ければ一店舗10分ほど遅くても30分で開発することが可能です。

まずざっとサイトの構成をながめ、どのページから女の子の一覧と出勤スケジュールを取得するか考えます。

この、サイト全体を眺める作業が一番難しいのです。人目も気になります、また、画像を無視して純粋にHTMLに集中するのが難しいのでございます。

ページが決まったら、HTMLの構造やスリーサイズの記述形式などをしらべ、どのように値を抽出するか決定いたします。

たとえばスリーサイズの記述方式は店舗によって大きく異なります。

 B83(C) W57 H85

が多いのですが、ほとんどのサイトでは

 B.83(C) W.57 H.85

のようにピリオドなどの記号をいれたり、

83(C) 57 85

のような数字の羅列であることもありますので、十分な注意が必要でございます。

ここまでできれば、あとは書くだけです。書くのは数分位あれば書くことが出来ます。

池袋紳士では BeautifulSoupというPythonのライブラリを使用して、女の子のプロフィールと出勤情報を取得しております。

例として、 優等生 の出勤嬢の取得をご紹介いたします。

優等生は池袋でも老舗のイメクラで昔は非常に良店であったのでございますが、数年前受付所が強盗に襲われてしばらく休業してた頃に勢いを失って回復できていないように感じます。

今でも老舗として頑張っていらっしゃいますが、昔の勢いを取り返してほしいと思っているのは僕だけでしょうか。

そんなことをおもいながら優等生の出勤ページを見てみます。このページの構造はとても綺麗にできていて、とても読みやすそうです。さすがは老舗です。

女の子の写真は thumb_area クラスの要素で、この要素を検索して女の子一覧を取得いたしたいと存じます。

名前とサイズと出勤時間は、thimb_area の兄弟要素です。

HTMLファイルの取得は、Python標準のurllibを使わせていただきます。

コードは次のようになりました。

from bs4 import BeautifulSoup
import urllib.request

page = urllib.request.urlopen("http://www.u-tousei.net/schedule/").read()
root = BeautifulSoup(page, "html.parser")
for thumb in root.find_all(class_="thumb_area"):
    girl = thumb.parent

    print("{name} - {size} - {time}".format(
        name = girl.find(class_="name").text,
        size = girl.find(class_="t_size").text,
        time = girl.find(class_="time").text))

実行すると

めいちゃん(22) - T153 B85(D) W59 H85 - 10:00〜13:00
るいちゃん(20) - T151 B84(D) W59 H83 - 10:00〜15:00
あゆみちゃん(25) - T148 B83(C) W59 H84 - 10:00〜17:00
さきちゃん(22) - T155 B84(B) W58 H85 - 10:00〜17:00
...

のように出力されます。

取得したHTMLから thumb_area がクラスの要素を検索して、その兄弟から name, t_size, time がクラスの要素を探して出力しているだけです。

昔、Javaで似たような処理を書いたことがございますが、この10倍以上の行数になっていた感じがいたします。

このプロジェクトはJavascriptとBackbone.js の勉強のためにもともと始めましたが、今ではすっかりこんな処理を簡単に書けるPythonが楽しくなってまいりました。

SIerのおじさんもWebサイトを書いてみた話

僕、けっこう大きめのSIerではたらくおじさん。

最近はC#で物流関係のシステム開発なんかをやるような。

Webアプリケーションには縁がございません。

勉強はそれでもいちおうしておきたいのでときおり趣味でちょっとしたものを書いたりします。

2ヶ月程前、出張中に「JavaScriptエンジニア養成読本」という本を見かけて暇つぶしに購入しました。

新幹線で読んだところbackbone.jsを分かりやすく紹介していて、この本を参考にシングルページのwebアプリケーションを書いてみたいと思いました。

フロントエンドはbackbone.jsを採用するとしてWebアプリにはサーバが必要となります。今回は、アプリケーションサーバは、Python言語のDjangoを採用することに致しました。Pythonは数年前に勉強した経験があるので今回は最新版のPython3を勉強してみたい。

勉強する対象は決まったので、次の問題は、何を書くか? です。あんまり凝ったページを作る時間はありません。

思いついたのが、大きな声では言えない趣味ですが、時々遊びに行く風俗店の一覧アプリ。

風俗店の紹介サイトは色々あるけれども、どれもゴタゴタとして見やすくない。シンプルなサイトがあったら嬉しい。

さっそく本を読みながら作リ始めると、お店一覧の検索ぐらいは作り始めてあっというまに作ることが出来ました。 Javascript/Backbone.js すごいと素直に感動いたしました。

Javascriptエンジニア養成読本」はとても良い本で、基本的なJavascriptjqueryの知識があれば、backbone.jsの基礎は十分に理解することができると思われます。

今回のアプリでは、処理のほとんどはJavascriptなのでサーバ側のDjangoはあまりやることもなく、ほぼ空気でした。でも、データベースのスキーマ管理やアクセスはDjangoのORMで行うことが出来たので、テストや運用は楽でした。

マスター管理画面も自動的に作成することができるので、そういった工数も大きく削減することができたと思われます。

そんなこんなで、開発自体は拍子抜けするほど簡単でございました。

技術的には。

しかし、作業がとてもむずかしかったです。

普通、こういう開発は休日に自宅でやりますが、これは自宅ではできません。こんなものを家内や中学生の娘に見つかるわけにはいかないのです。

近所のファミレスなどで作業をしていても、人目が気になってしまう。

実際に開発するまでは、気が付きませんでした。

そういった点で、開発がなかなか捗りませんでした。

この記事も、近所のドトールで書いています。

もう一つ困った点というか、不満足な点があります。

これは、会社でも人に見せられません。

見せられませんとも。

なので、会社でわからない点を聞いたり、自信がないところを見てもらったり、自慢したりすることができないのでございます。

これはとてもさびしく、欲求不満がたまります。

一人で作って、完成しても誰に見せることもなく消してしまうのは、あまりにも残念。

そこで、僕は考えました。

もうちょっと頑張って、一般公開できるレベルまで仕上げることができれば、まだ救われる気が致します。

PythonDjangoの勉強が足りないのも気になっていたので、もうちょっと開発してみたいとも思っておりました。

そういえば、よく話に聞くAmazonクラウドサービス、SIerの業務システムではなかなか使いにくいので手を出すことができないのですが、この際だからAWSも使ってみたい。

というわけで、AWSでサーバを立ち上げ、お店のデータとして、池袋の風俗店を100件ほど登録。

単なる一覧表示だけでなく、ログインできるようにして、お気に入りの店にマークをつけて、リストの先頭に表示することが出来る機能を追加いたしました。

また、風俗店の出勤情報を収集して、自動的に表示することができる機能も開発いたしましました。いまは、すべての店の情報を収集することは出来ませんが、現在のところ40店舗以上の出勤情報を表示することが出来ます。

と、ここまで仕上げたサイトが

池袋紳士

になります。

家族の目を盗んで開発を進めることにだいぶ疲れてきているので、今後の開発予定については不明です。

ですが、Javascript/Backbone.js クラスタで、時間に余裕がおありの方々がいらっしゃれば、いろいろとツッコミを入れて頂けるとわざわざ公開した甲斐がございます。

よいアドバイスを頂いた方には、もしご希望がありましたら、池袋でおすすめの風俗嬢をご紹介するなどのお礼をさせていただくことも出来ますので、ぜひともよろしくお願い致します。