Slide 1

Slide 1 text

Pythonでスクレイピングしてみた twitter: @4lek3 github: alek-3

Slide 2

Slide 2 text

自己紹介 ・アレク(@4lek3) ・SIer ・Javaメイン ・Python初心者(去年末から始めた) ・業務での使用経験なし

Slide 3

Slide 3 text

なぜPython? ・Webアプリ開発はJavaだけだとしんどい ・軽い ・人気≒情報が豊富

Slide 4

Slide 4 text

なぜLT? ・とあるブログ記事  Pythonの学び方と,読むべき本を体系化しました2018〜初心者から上級者まで  「コミュニティに参加してみる」 ・”初めてのLT枠”

Slide 5

Slide 5 text

今回発表するもの ・スクレイピング ・オンライン対戦麻雀天鳳 ・1試合ごとの対戦成績が取得できる  ・今回は861戦分 ・その結果をまとめる

Slide 6

Slide 6 text

戦績

Slide 7

Slide 7 text

HTMLの中身

Slide 8

Slide 8 text

分析項目 ・1位~4位の合計回数 ・直近100戦の1~4位の回数の推移  ・最初は成績が悪く、終盤は良いことは知っている ・csvファイルに出力 ⇒https://github.com/alek-3/tenhou-scraping-py

Slide 9

Slide 9 text

出力ファイル ・csvファイル(下の画像は編集用のxlsx)

Slide 10

Slide 10 text

出力結果

Slide 11

Slide 11 text

問題点 ・遅い気がする  ・処理全体で2分かかる  ・パース処理に時間が費やされている ・「これは遅いので改善できますよ」というフィードバックをもらう

Slide 12

Slide 12 text

改善前 # 対戦番号の1位~4位のプレーヤー名の idを作成する。 id_first = '#rptMain_ctl' + str_count + '_lblPLAYER1' id_second = '#rptMain_ctl' + str_count + '_lblPLAYER2' id_third = '#rptMain_ctl' + str_count + '_lblPLAYER3' id_fourth = '#rptMain_ctl' + str_count + '_lblPLAYER4' # 対戦番号の1位~4位のプレーヤー名を抽出する。 text_first = soup.select(id_first)[0].getText() text_second = soup.select(id_second)[0].getText() text_third = soup.select(id_third)[0].getText() text_fourth = soup.select(id_fourth)[0].getText()

Slide 13

Slide 13 text

BeautifulSoup ・マニュアルサイトを見る ・find_all()メソッドが使えそう  ・とりあえずspanタグがついているものは全部取得

Slide 14

Slide 14 text

HTMLの中身(もう一度)

Slide 15

Slide 15 text

改善後 # 対戦情報をすべて抽出 spans = soup.find_all('span') for i in spans: # 以下内容を抽出して順位集計する処理

Slide 16

Slide 16 text

改善結果 ・bs4メソッド呼び出し回数:3000回以上→1回 ・全体の処理時間:2分→数秒

Slide 17

Slide 17 text

教訓 ・プログラムを書いてフィードバックをもらおう  ・フィードバックをいただけることに感謝 ・気軽にLT出よう  ・機会をいただけることに感謝