Я сканирую серию веб-страниц и систематизирую их содержимое в базе знаний в памяти. Мне нужно выполнить другой код в зависимости от моего ввода строки, который сканируется из заголовков веб-сайта.
tags = browser.find_elements_by_xpath("//div[@class='main-content-entry']/h2")
for tag in tags:
heading = tag.get_attribute("textContent").lower().strip()
content = tag.parent
if heading.find("overview") != -1:
# do this
elif heading.find("takeaways") != -1:
# do that
# do more elifs
else:
# do something else
Прямо сейчас я реализовал это как выражение if-elif-else. Я видел ответы по всему сайту, предлагающие использовать dicts, но насколько я могу судить, это зависит от того, является ли ввод точным соответствием ключу. Однако в моем случае точное совпадение не всегда возможно из-за несоответствий со стороны владельца сайта.
Страницы достаточно структурированы, чтобы я знал, как называются названия заголовков, поэтому я могу заранее определить «ключи» в своем коде. Тем не менее, есть некоторые опечатки и небольшие варианты на некоторых из более чем 100 страниц для некоторых заголовков. Например:
- Сборы и финансирование
- Тарифы
- Сборы и финансирование
- Сертификаты
- Сертификат
- Сертификат и экзамены
- экзамены и сертификаты
Лучшее, что я могу сделать, как и сейчас, - это сначала просмотреть страницы, идентифицировать весь набор заголовков, а затем вручную определить подстроки для использования в моем коде, чтобы избежать повторения.
Учитывая вышесказанное, есть ли лучший способ, чем итеративное выполнение цепочечного оператора if-elif-else?
Редактировать
Предлагаемые ответы в Замены для оператора switch в Python? не работают в моей ситуации. Возьмите для примера:
def do_this(heading):
return {
"overview": do_overview(),
"fees": do_fees(),
# ...
}[heading]
Это было бы предложенное выполнение ответами на этот вопрос. Но как мне вернуть do_fees()
, если heading
равно "fees & funding"
, "fees"
, "fees &funding"
и т. Д. И т. Д.? Мне нужно выполнить правильную функцию, если значение ключа является подстрокой heading
.