from bs4 import BeautifulSoup import requests import urllib.parse JISHO_BASE_URL = "https://jisho.org/search" def inject_kanji_meanings(entries: list) -> list: entries_with_meanings = [] for index, entry in enumerate(entries): kanji = entry.kanji print(f"Fetching data for #{index}: {kanji}") resource_part = urllib.parse.quote_plus(f"{kanji}#kanji") url = f"{JISHO_BASE_URL}/{resource_part}" resp = requests.get(url) resp.raise_for_status() soup = BeautifulSoup(resp.text, "html.parser") container = soup.select_one("div#page_container") meanings = container.select(".kanji-details__main-meanings") kanji_meaning_texts = map(lambda e: e.text.strip(), meanings) kanji_characters = container.select(".character") kanji_character_texts = map(lambda e: e.text.strip(), kanji_characters) result_tuples = zip(kanji_character_texts, kanji_meaning_texts) result_strs = map(lambda t: " ".join(t), result_tuples) result = "
".join(result_strs) entry.meanings = result entries_with_meanings.append(entry) return entries_with_meanings