Utilisez la recherche de zone de bureau de poste https://www.post.japanpost.jp/zipcode/index.html
Une fonction qui analyse le résultat du formulaire ci-dessus et renvoie la valeur de retour sous forme de dictionnaire
import requests
from bs4 import BeautifulSoup
import re
pref_key = {
'Hokkaido': 1,
'Préfecture d'Aomori': 2,
'Préfecture d'Iwate': 3,
'Préfecture de Miyagi': 4,
'Akita': 5,
'Préfecture de Yamagata': 6,
'Préfecture de Fukushima': 7,
'Préfecture d'Ibaraki': 8,
'Préfecture de Tochigi': 9,
'Préfecture de Gunma': 10,
'Saitama': 11,
'Préfecture de Chiba': 12,
'Tokyo': 13,
'Préfecture de Kanagawa': 14,
'Préfecture de Niigata': 15,
'Préfecture de Toyama': 16,
'Préfecture d'Ishikawa': 17,
'Préfecture de Fukui': 18,
'Préfecture de Yamanashi': 19,
'Préfecture de Nagano': 20,
'Préfecture de Gifu': 21,
'Préfecture de Shizuoka': 22,
'Préfecture d'Aichi': 23,
'Préfecture de Mie': 24,
'Préfecture de Shiga': 25,
'Kyoto': 26,
'Préfecture d'Osaka': 27,
'Préfecture de Hyogo': 28,
'Préfecture de Nara': 29,
'Préfecture de Wakayama': 30,
'Préfecture de Tottori': 31,
'Préfecture de Shimane': 32,
'Préfecture d'Okayama': 33,
'Préfecture d'Hiroshima': 34,
'Préfecture de Yamaguchi': 35,
'Préfecture de Tokushima': 36,
'Préfecture de Kagawa': 37,
'Préfecture d'Ehime': 38,
'Préfecture de Kochi': 39,
'Préfecture de Fukuoka': 40,
'Préfecture de Saga': 41,
'Préfecture de Nagasaki': 42,
'Préfecture de Kumamoto': 43,
'Préfecture d'Oita': 44,
'Préfecture de Miyazaki': 45,
'Préfecture de Kagoshima': 46,
'Préfecture d'Okinawa': 47
}
def get_html_text(url: str) -> str:
try:
req = requests.get(url)
except requests.exceptions.ConnectionError:
return False
return req.content
def getAddress(postal_code: int) -> dict:
url = f'https://www.post.japanpost.jp/smt-zipcode/zipcode.php?zip={postal_code}'
content = get_html_text(url)
if not content:
return False
soup = BeautifulSoup(content, 'html.parser')
dds = [i.text.strip() for i in soup.body.findAll('dd')]
if not dds:
return False
dds = dds[:4]
info = {
'postal': dds[0].replace('-', ''),
'pref': dds[1],
'city': dds[2],
'address': re.sub(r'\(.*', '', dds[3])
}
info['pref_no'] = pref_key[info['pref']]
return info
if __name__ == "__main__":
data = getAddress(1000004)
print(data)
"""
résultat
{
'postal': '1000004',
'pref': 'Tokyo',
'city': 'Quartier Chiyoda',
'address': 'Otemachi (à l'exclusion des bâtiments suivants, bâtiment JA)',
'pref_no': 13
}
"""
Recommended Posts