Я пытаюсь найти поля поиска на веб-сайтах, используя пакет Python Mechanize для поиска форм на веб-страницах.Практически каждый веб-сайт определяет эти формы по-своему, поэтому мне нужно искать кучу разных подписей.Поскольку функция Mechanize Browser.select_form выдает исключение всякий раз, когда не удается найти указанную форму, поиск множества различных форм превращается в длинный список операторов try и исключением.
Первое, что я попробовал (или свернул), это следующая структура.Это работает, но 1: это выглядит не очень хорошо, 2: плохо расширяется (если мне нужно еще больше утверждений, это превращается в хаос) и 3: в целом это просто похоже на плохой код.
from mechanize import Browser
br = Browser()
br.open(url)
try:
br.select_form(id=lambda x: 'search' in x)
except Exception:
try:
br.select_form(class_=lambda x: 'search' in x)
except Exception:
try:
br.select_form(action=lambda x: 'search' in x)
except Exception:
try:
br.select_form(role=lambda x: 'search' in x)
except Exception:
print('NOTHING FOUND')
pass
Возможно, немного лучшим решением было бы направить предложения исключений к функциям, как в https://stackoverflow.com/a/6095782/11309912. Это решило бы боковое расширение, но все еще состоит из большого количества повторяющегося кода.
Для меня идеальным решением было бы иметь список утверждений, которые я мог бы повторять, пока не будет найден один тип формы.Очень грубый пример:
forms = ['id=lambda x: 'search' in x', 'class_=lambda x: 'search' in x', .....]
for form in forms:
try:
br.select_form(form)
break
except Exception:
pass
Возможно ли что-то похожее на это?