選挙ドットコムの過去選挙結果をスクレイピング
選挙ドットコム
go2senkyo.com
の地方選挙の選挙結果をスクレイピング。
ie.navigate のURL部分を引数にすればガッツリとれるような気がする
※世田谷区議選でのみ動作確認
'参照設定 Microsoft HTML Object Library ' Microsoft Internet Controls ' ieCheck: https://www.vba-ie.net/code/iecheck.php Public Sub getSenkyoData() Dim ie As InternetExplorer: Set ie = New InternetExplorer ': ie.Visible = True ie.navigate "https://go2senkyo.com/local/senkyo/9926" Call ieCheck(ie) Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets.Add Dim dom As HTMLDocument: Set dom = ie.document Dim el As IHTMLElement Dim nRow As Long: nRow = 2 Dim buf As Variant '選挙情報を取得する ws.Range("J1") = "都道府県" ws.Range("K1") = dom.getElementsByClassName("p_local_senkyo_ttl_wrapp")(0).getElementsByTagName("p")(0).innerText ws.Range("J2") = "選挙名" buf = Split(dom.getElementsByTagName("h1")(1).innerText, vbCrLf) ws.Range("K2") = buf(0) ws.Range("J3") = "投票日" ws.Range("K3") = dom.getElementsByClassName("m_senkyo_data")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(0).innerText ws.Range("J4") = "投票率" buf = Split(dom.getElementsByClassName("m_senkyo_data")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(1).innerText, "(") ws.Range("K4") = buf(0) ws.Range("J5") = "定数" buf = Split(dom.getElementsByClassName("m_senkyo_data")(0).getElementsByTagName("tr")(0).getElementsByTagName("td")(2).innerText, "/") ws.Range("K5") = buf(0) ws.Range("J6") = "告示日" ws.Range("K6") = dom.getElementsByClassName("m_senkyo_data")(0).getElementsByTagName("tr")(1).getElementsByTagName("td")(0).innerText ws.Range("J7") = "前回投票率" ws.Range("K7") = dom.getElementsByClassName("m_senkyo_data")(0).getElementsByTagName("tr")(1).getElementsByTagName("td")(1).innerText '見出し ws.Range("A1") = "当落" ws.Range("B1") = "氏名" ws.Range("C1") = "氏名カナ" ws.Range("D1") = "所属" ws.Range("E1") = "年齢" ws.Range("F1") = "性別" ws.Range("G1") = "現元新" ws.Range("H1") = "得票数" For Each el In dom.getElementsByClassName("m_senkyo_result_table")(0).getElementsByTagName("tr") If el.getElementsByTagName("td")(0).innerHTML <> "" Then ws.Range("A" & nRow) = "当選" ws.Range("B" & nRow) = Replace(Replace(el.getElementsByClassName("m_senkyo_result_data_ttl")(0).innerText, el.getElementsByClassName("m_senkyo_result_data_kana")(0).innerText, ""), vbCrLf, "") '氏名 ws.Range("C" & nRow) = el.getElementsByClassName("m_senkyo_result_data_kana")(0).innerText 'カナ氏名 ws.Range("D" & nRow) = el.getElementsByClassName("m_senkyo_result_data_circle")(0).innerText '所属 buf = Split(el.getElementsByClassName("m_senkyo_result_data_para")(0).getElementsByTagName("span")(0).innerText, "(") '年齢と性別を分離 ws.Range("E" & nRow) = Replace(buf(0), "歳", "") '年齢 ws.Range("F" & nRow) = Replace(buf(1), ")", "") '性別 ws.Range("G" & nRow) = el.getElementsByClassName("m_senkyo_result_data_para")(0).getElementsByTagName("span")(1).innerText '現元新 ws.Range("H" & nRow) = Trim(Replace(el.getElementsByClassName("right")(0).innerText, "票", "")) '得票数 nRow = nRow + 1 Next el End Sub