さて以前の記事(約11か月前)からの続き内容となっています。
kikyou9drt.hatenablog.com
今回はローカルに保存されたまま放置されていたHTMLをどう料理するか考えていきたいと思います。
PythonとPythonからExcelを操作できるライブラリ、openPyxlを使用して、楽曲データをExcel化できないかと考えました。
やること
1.HTMLファイルを読み込む。
beautifulSoupを使用してHTMLファイルを読み込みます。
この時、保存形式が.mhtmlだった場合は以下の記事を参考にデコード処理します。
kikyou9drt.hatenablog.com
2.タグ構造を解析しリストに追加
tbody以下が楽曲データのテーブルとなっているようです。
3つ目のtr以下に楽曲データが入っています。
曲名、難易度種別、スコアは(とりあえず)そのまま持っていき、
DJ LEVELとクリアランプは画像へのリンクとなっているので加工します。
# クリアレベル clearlevel = data[2].find('img')['src'].split("/") record.append(clearlevel[-1].rstrip('.gif'))
直接取得するとクリアレベル画像のURLが取得できるので、
そこからファイル名のみを取得し、拡張子の.gifをカット。
# クリアランプ clearFlag = data[4].find('img')['src'].split("/") if clearFlag[-1] == 'clflg1.gif': record.append('failed') elif clearFlag[-1] == 'clflg2.gif': record.append('A-Clear') elif clearFlag[-1] == 'clflg3.gif': record.append('E-Clear') elif clearFlag[-1] == 'clflg4.gif': record.append('Clear') elif clearFlag[-1] == 'clflg5.gif': record.append('H-Clear') elif clearFlag[-1] == 'clflg6.gif': record.append('EXH-Clear') elif clearFlag[-1] == 'clflg7.gif': record.append('FullCombo')
上記と同じくファイル名のみを取得し、ファイル名からクリアランプ種別を分岐。
3.Excel化
OpenPyxlで配列の内容を保存します。
(適当に書いた)ソースコード全貌
# coding: utf-8 from bs4 import BeautifulSoup #import quopri #デコードがいる場合 import openpyxl def main(): # ファイルの場所を指定 html = ('') soup = BeautifulSoup(open(html), 'lxml', from_encoding='Shift_JIS') soup.prettify('Shift_JIS') # <tr>~</tr>を取得 table = soup.find_all('tbody')[1] tr = table.find_all('tr') outdata = [] for Row in tr: data = Row.find_all('td') record = [] if (len(data)> 2): # 曲名 #musicname = quopri.decodestring(data[0].text) #デコードがいる場合このように処理 musicname = data[0].text record.append(musicname) # 難易度種別 difficult = data[1].text record.append(difficult) # クリアレベル clearlevel = data[2].find('img')['src'].split("/") record.append(clearlevel[-1].rstrip('.gif')) # スコア score = data[3].text record.append(score) # クリアランプ clearFlag = data[4].find('img')['src'].split("/") if clearFlag[-1] == 'clflg1.gif': record.append('failed') elif clearFlag[-1] == 'clflg2.gif': record.append('A-Clear') elif clearFlag[-1] == 'clflg3.gif': record.append('E-Clear') elif clearFlag[-1] == 'clflg4.gif': record.append('Clear') elif clearFlag[-1] == 'clflg5.gif': record.append('H-Clear') elif clearFlag[-1] == 'clflg6.gif': record.append('EXH-Clear') elif clearFlag[-1] == 'clflg7.gif': record.append('FullCombo') outdata.append(record) #print(outdata) #出力確認 #Excelシート化 wb = openpyxl.Workbook() ws = wb.active for row in outdata: ws.append(row) #ファイルの保存場所指定 wb.save('') if __name__ == "__main__": main()