きゃっとぐるーぶ

忘れてもいいようにメモを取っても、メモを取ったことを忘れる男の備忘録

将棋倶楽部24のユーザー情報を集めたい

将棋倶楽部24のユーザー情報をスクレイプして、JSON化する。 サークルメンバーのレートや勝敗の変動を観察する目的。

名簿で検索し、それをコピペ、csvにして保存。 保存したcsvをプログラムでJSON化する。

csvにする過程もPythonで行いたいがrequest_htmlではうまくいかないようだ。

import csv
import json
from time import sleep

from requests_html import HTMLSession

session = HTMLSession()
usersdb = []

def read_csv():
    data = []
    with open('example.csv', 'r') as f: 
        reader = csv.reader(f)
        next(reader)
        for row in reader: 
            data.append((row[1], row[-1]))  
    return data

def fetchUserData(arg):
    tpl_url = 'https://www.shogidojo.net/event/user/personal.php?id={}'
    url = tpl_url.format(arg)
    r = session.get(url)
    sleep(3)
    
    return r

def createUserDB(arg):
    global usersdb
    data = []
    
    r = fetchUserData(arg)

    for tr in r.html.find('tr'):
        pat = ['th', 'td']
        data.append([t.text for p in pat for t in tr.find(p)])

    name_date = [s for s in r.html.find('.fontB', first=True).text.split('\u3000') if s != ''] 

    result = [val for dt in data for val in zip(dt[:2], dt[2:])]
    user = {name_date[0]:result, 'date':name_date[1]}
    usersdb.append(user)

def save_UserDB():
    with open('users_db.json', 'w') as f:
        json.dump(usersdb, f)
    
def main():
    [createUserDB(uid) for name, uid in read_csv()]  
    save_UserDB()

main()

PythonによるWebスクレイピング 第2版

PythonによるWebスクレイピング 第2版