データ取り

ガールフレンド(仮)速報では、女の子たちのプロフィールと顔写真がまとまっている。ここからhtmlを取得してプロフィールデータをパースするという流れて、wgetを使おうと思ったらjavascriptが云々言われたので、デスクトップ自動化でゴリ押しする。
ubuntu OSでPython使いならxautomationを使おう。

# Pythonで
import os
import time
import sys
try:
	import pygtk
	pygtk.require("2.0")
except:
	pass

try:
	import gtk
	import gtk.glade
except:
	sys.exit(1)


url = "http://girlfriend-kari.jp/schoolroster/girl.html?girlID="
id = ["0"*(3-len(str(i))) + str(i) for i in range(1, 120)] # GFのID

def xte_python(url, id, interval):
	pages = map(lambda x: "xte " + '"' + 'str ' + str(url + x) + '"', id)
	os.system("xte 'mousemove 160 400'")
	os.system("xte 'mouseclick 1'")
	time.sleep(1)
	cmds = ["xte 'keydown Alt_L'", "xte 'key D'", "xte 'keyup Alt_L'", "xte 'keydown Control_L'", "xte 'key S'", "xte 'keyup Control_L'", "xte 'key Return'"]
	for p in range(len(pages)):
		for i in [0, 1, 2]: # html入力にカーソル合わせる。
			os.system(cmds[i])
			time.sleep(1)   # ここを詰め過ぎると、メインメニューに戻ってしまう。
		
		os.system(pages[p]) # 入力する。
		time.sleep(1)
		os.system("xte 'key Return'") # エンターする。
		time.sleep(1)
		for i in [3, 4, 5, 6]: # 保存する。
			os.system(cmds[i])
			time.sleep(1)   # ここを詰め過ぎると、メインメニューに戻ってしまう。
		
		time.sleep(interval)
xte_python(url, id, 1)

これで取得したhtmlファイルをPythonとか正規表現とか使ってゴリ押しして加工する。

# html perse
wd = "/girlfriend/" # データが入っているディレクトリ
girls = os.listdir(wd)

w0 = open("/girlfrienddata.txt", "w") # 出力

import re
re0 = re.compile("].*?<")        # プロフィールの正規表現
re1 = re.compile("<title>.*?|") # ガールフレンドの名前を取得するところ
for j in range(len(girls)):
	g0 = open(wd + girls[j], "rU")
	for i in range(107):
		tmp = g0.readline()
		if i == 1:
			girlid = tmp.split("girlID=")[1].split(" --")[0]
		
		elif i == 14:
			name0 = re1.search(tmp).group()[7:-3] # マルチバイト文字のせいでなんかおかしい。
			name  = name0.decode("utf-8")
	
	tmp1 = tmp.decode("utf-8").rstrip().split("</div></div>")[0].split("spec1")[1]
	grade = tmp1.split("</p>")[0].split(">")[1].split("<br")[0]
	club = tmp1.split("</p>")[0].split(">")[2]
	tmp2 = re0.findall(tmp1)
	res = [girlid]+[name]+[grade]+[club]+map(lambda x: x[1:-1], tmp2)
	w0.write("\t".join(res)+"\n")

w0.close()

この段階で、スリーサイズがBWH連結したままだったりするがあとはRとかでstrsplitしてゴリ押しして整形する。