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,
"市町村名": "豊根"
}
}
}