import datetime import re from urllib.parse import urljoin import pandas as pd import requests from bs4 import BeautifulSoup url = "https://www.pref.aichi.jp/toukei/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" } def get_link(url, text): r = requests.get(url, headers=headers) r.raise_for_status() soup = BeautifulSoup(r.content, "html.parser") tag = soup.find("a", text=text) return tag JST = datetime.timezone(datetime.timedelta(hours=+9), "JST") dt_now = datetime.datetime.now(JST) link = get_link(url, "あいちの人口").get("href") tag = get_link(link, re.compile("現在人口")) csv_url = urljoin(link, tag.get("href")) m = re.match("(\d{4})年(\d{1,2})月(\d{1,2})日", tag.get_text()) if m: year, month, day = map(int, m.groups()) dt_now = datetime.datetime(year, month, day) dt_now df = pd.read_csv(csv_url, index_col="県市町村").dropna(how="all") df_city = ( df[df["性別"] == "男女"] .loc[:, ["コード", "総数"]] .rename(columns={"コード": "市町村コード", "総数": "人口"}) ) df_city["市町村名"] = df_city.index.str.rstrip("県市町村") city_data = df_city.to_dict(orient="index") data = {"lastUpdateAt": dt_now.isoformat(), "data": city_data} import json with open("city_data.json", "w", encoding="utf-8") as fw: json.dump(data, fw, ensure_ascii=False, indent=4)
{ "lastUpdateAt": "2020-11-01T00:00:00", "data": { "愛知県": { "市町村コード": 23000, "人口": 7538701, "市町村名": "愛知" }, "名古屋市": { "市町村コード": 23100, "人口": 2327689, "市町村名": "名古屋" }, "豊橋市": { "市町村コード": 23201, "人口": 371856, "市町村名": "豊橋" }, "岡崎市": { "市町村コード": 23202, "人口": 385371, "市町村名": "岡崎" }, "一宮市": { "市町村コード": 23203, "人口": 378768, "市町村名": "一宮" }, "瀬戸市": { "市町村コード": 23204, "人口": 127265, "市町村名": "瀬戸" }, "半田市": { "市町村コード": 23205, "人口": 117742, "市町村名": "半田" }, "春日井市": { "市町村コード": 23206, "人口": 306538, "市町村名": "春日井" }, "豊川市": { "市町村コード": 23207, "人口": 183958, "市町村名": "豊川" }, "津島市": { "市町村コード": 23208, "人口": 61030, "市町村名": "津島" }, "碧南市": { "市町村コード": 23209, "人口": 72601, "市町村名": "碧南" }, "刈谷市": { "市町村コード": 23210, "人口": 153481, "市町村名": "刈谷" }, "豊田市": { "市町村コード": 23211, "人口": 422878, "市町村名": "豊田" }, "安城市": { "市町村コード": 23212, "人口": 188705, "市町村名": "安城" }, "西尾市": { "市町村コード": 23213, "人口": 169017, "市町村名": "西尾" }, "蒲郡市": { "市町村コード": 23214, "人口": 79419, "市町村名": "蒲郡" }, "犬山市": { "市町村コード": 23215, "人口": 72926, "市町村名": "犬山" }, "常滑市": { "市町村コード": 23216, "人口": 57689, "市町村名": "常滑" }, "江南市": { "市町村コード": 23217, "人口": 97541, "市町村名": "江南" }, "小牧市": { "市町村コード": 23219, "人口": 148128, "市町村名": "小牧" }, "稲沢市": { "市町村コード": 23220, "人口": 134893, "市町村名": "稲沢" }, "新城市": { "市町村コード": 23221, "人口": 43778, "市町村名": "新城" }, "東海市": { "市町村コード": 23222, "人口": 113284, "市町村名": "東海" }, "大府市": { "市町村コード": 23223, "人口": 92418, "市町村名": "大府" }, "知多市": { "市町村コード": 23224, "人口": 84059, "市町村名": "知多" }, "知立市": { "市町村コード": 23225, "人口": 71868, "市町村名": "知立" }, "尾張旭市": { "市町村コード": 23226, "人口": 82176, "市町村名": "尾張旭" }, "高浜市": { "市町村コード": 23227, "人口": 48765, "市町村名": "高浜" }, "岩倉市": { "市町村コード": 23228, "人口": 47941, "市町村名": "岩倉" }, "豊明市": { "市町村コード": 23229, "人口": 69381, "市町村名": "豊明" }, "日進市": { "市町村コード": 23230, "人口": 92713, "市町村名": "日進" }, "田原市": { "市町村コード": 23231, "人口": 59148, "市町村名": "田原" }, "愛西市": { "市町村コード": 23232, "人口": 61000, "市町村名": "愛西" }, "清須市": { "市町村コード": 23233, "人口": 69771, "市町村名": "清須" }, "北名古屋市": { "市町村コード": 23234, "人口": 86101, "市町村名": "北名古屋" }, "弥富市": { "市町村コード": 23235, "人口": 43083, "市町村名": "弥富" }, "みよし市": { "市町村コード": 23236, "人口": 62919, "市町村名": "みよし" }, "あま市": { "市町村コード": 23237, "人口": 87616, "市町村名": "あま" }, "長久手市": { "市町村コード": 23238, "人口": 62414, "市町村名": "長久手" }, "東郷町": { "市町村コード": 23302, "人口": 44093, "市町村名": "東郷" }, "豊山町": { "市町村コード": 23342, "人口": 15708, "市町村名": "豊山" }, "大口町": { "市町村コード": 23361, "人口": 24248, "市町村名": "大口" }, "扶桑町": { "市町村コード": 23362, "人口": 34260, "市町村名": "扶桑" }, "大治町": { "市町村コード": 23424, "人口": 32550, "市町村名": "大治" }, "蟹江町": { "市町村コード": 23425, "人口": 36827, "市町村名": "蟹江" }, "飛島村": { "市町村コード": 23427, "人口": 4604, "市町村名": "飛島" }, "阿久比町": { "市町村コード": 23441, "人口": 28182, "市町村名": "阿久比" }, "東浦町": { "市町村コード": 23442, "人口": 49156, "市町村名": "東浦" }, "南知多町": { "市町村コード": 23445, "人口": 16788, "市町村名": "南知多" }, "美浜町": { "市町村コード": 23446, "人口": 22490, "市町村名": "美浜" }, "武豊町": { "市町村コード": 23447, "人口": 43115, "市町村名": "武豊" }, "幸田町": { "市町村コード": 23501, "人口": 42409, "市町村名": "幸田" }, "設楽町": { "市町村コード": 23561, "人口": 4408, "市町村名": "設楽" }, "東栄町": { "市町村コード": 23562, "人口": 2937, "市町村名": "東栄" }, "豊根村": { "市町村コード": 23563, "人口": 996, "市町村名": "豊根" } } }