データベースを使ったサイトを作りたい① データを収集する

スポンサーリンク
スポンサーリンク

あんま複雑じゃないやつ

なんかいい題材ないかなーと、さ迷っていたら将棋連盟のサイトにまいにち詰将棋というコーナーがあるのを知った。

まいにち詰将棋|詰将棋・次の一手|日本将棋連盟
日本将棋連盟のまいにち詰将棋のページです。日本将棋連盟は伝統文化としての将棋の普及発展と技術向上や将棋を通じた交流親善などを目的とした公益社団法人です。

これの右のメニューのところの手数のリンクはこのまいにち詰将棋のカテゴリ分けされているわけではなく、また別物で、まいにち詰将棋自体は特に整理されているわけではなさ気な感じだった。これをいい感じに検索できるサイトとかどうかなーと思ったので挑戦してみる。

スポンサーリンク

スクレイピング

とりあえず今ある詰将棋を集めてデータを作る。今自分にできるのはVBA+IEでのスクレイピングなので、それ使ってデータを収集する。

Sub getdata()

    Dim objIE As InternetExplorer
    Set objIE = CreateObject("Internetexplorer.Application")
    
    objIE.Visible = True
    objIE.navigate "https://www.shogi.or.jp/tsume_shogi/everyday/"
    
    Do While objIE.Busy = True Or objIE.readyState <> 4
    DoEvents
    Loop
    
    Dim htmldoc As HTMLDocument
    Set htmldoc = objIE.document
    
    Call scrape(htmldoc)
    
    Dim lastpg As Long
    lastpg = 103
    
    For i = 2 To lastpg
        objIE.navigate "https://www.shogi.or.jp/tsume_shogi/everyday/index_" & i & ".html"

        Do While objIE.Busy = True Or objIE.readyState <> 4
        DoEvents
        Loop

        Set htmldoc = objIE.document

        Call scrape(htmldoc)

    Next i

End Sub
Function scrape(ByVal doc As HTMLDocument)
    
    
    Dim ul As IHTMLElementCollection
    Set ul = doc.getElementsByClassName("floatListA01Col3-30 indexListA01 fixHeight section04")
    
    Dim taga As IHTMLElementCollection
    Set taga = ul(0).getElementsByTagName("a")
    
    Dim tagp As IHTMLElementCollection
    Set tagp = ul(0).getElementsByTagName("p")
    
    For i = 0 To 11
        Dim lr As Long
        lr = ThisWorkbook.Sheets("data").Cells(Rows.Count, 1).End(xlUp).Row
    
        ThisWorkbook.Sheets("data").Range("A" & lr + 1).Value = tagp(i).innerText
        ThisWorkbook.Sheets("data").Range("B" & lr + 1).Value = taga(i).href
    Next i

End Function

こんな。最後のページでエラー出て止まるけど、とりあえず目的のデータを集めれた。

raw
シート1 2020年8月24日の詰将棋(3手詰), 2020年8月23日の詰将棋(黒田尭之作、9手詰),

で、これをちょっと加工して、作成者と手数の列と更新日の列を作って、んー、とりあえずCSVで保存する。

詰将棋
シート1 date,title,maker,steps,url 2017/4/1,2017年4月1日の詰将棋(内藤國雄作、11手詰),内藤國雄,11, 2017/4/2,2017年4月2日の詰将棋(中村修作、11手詰),中村修,11,

こんな。なんか、別にもうこれでフィルタかけりゃ目的達成できてね?っていうのはあるものの、これをデータベースに保存してー、クエリに応じてデータ引っ張ってきて表示ーみたいなのをやりたいの。

とりあえず今日はここまで。

コメント

タイトルとURLをコピーしました