【スクレイピング】【Python】【将棋ネタ】将棋データベースサイトからSFEN形式で局面を取得する

はじめに

ここ数年将棋ブームが来ています。たぶん。
ブームに乗るために将棋を始めました。「激指14」というPCソフトでコンピューター相手に将棋をさしています。はっきりいって初心者です。現在10級相手に勝ったり負けたり。目標は1ヵ月で1級ずつ昇級して1年後に初段になることとしました。

強くなることと関係ありませんがPythonで将棋データベースをいじってみました。
将棋の局面はSFEN形式で表すことが一般的のようです。棋譜データベースからSFEN形式のデータを取得してみます。ちなみにこれをやったところで将棋は強くなりません。むしろ将棋の勉強から逃避している感さえあります(笑)。
利用したのは以下のサイトです。
将棋DB2 - 無料の棋譜サービス 将棋DB2

Pyhonスクリプト

データを取得するスクリプト

以下を実行すると指定した1局のすべての局面におけるSFEN形式のデータが取得できテキストファイルに保存されます。

import requests
import re
import sys

args = sys.argv

r = requests.get(args[1])

title = re.findall('<title>.+</title>', r.text)
title = title[0].replace('<title>', '').replace('</title>', '').split()
title = ''.join(title[:-3])

sfen_list = re.findall('"sfen":"\S+\s[b|w]\s\S+\s[0-9]+"', r.text)
sfen_list = [x.replace('"', '').replace('sfen:', '') for x in sfen_list]
new_list = list(dict.fromkeys(sfen_list))

with open(title + '.txt', "w") as f:
    f.write('\n'.join(new_list))

使用例

python kifu_read.py https://shogidb2.com/games/b1a6cf7b43c4df8b50f73af76853f993e2c1d100

保存したデータを検索するスクリプト

import glob
import sys

args = sys.argv
kyokumen = ' '.join(args[1:])

lists = glob.glob('*.txt')

for each_file in lists:
    with open(each_file, 'r') as f:
        data1 = f.read()
        if (kyokumen in data1):
            print(each_file)

最後に

最近2足歩行ロボットを作ろうと決心して新たなブログを立ち上げました。
2足歩行ロボットを作るまでの長い道のり
そちらもぼちぼち進めていこうと思っています。