Есть ли способ обрабатывать разные, изменяющиеся имена классов при извлечении с веб-сайта в BeautifulSoup?

#python #beautifulsoup

Вопрос:

Я собираю данные с веб-сайта и беру определенную информацию. Это может существовать в классе «ошибка текста» или «успех текста». Оно меняется в зависимости от того, является ли значение положительным или отрицательным. Итак, я попытался

    success = soup.find('span', class_='text-success')
 

для одного класса, но я не уверен, как справиться, если это класс «текстовая ошибка». Как я могу вернуть только существующее значение? Я также запускаю это в цикле, чтобы постоянно проверять значения.

Комментарии:

1. Итак, вы хотите искать class_='text-success' или class_='text-error' ?

2. @AndrejKesely Я хочу искать и то, и другое, потому что одновременно в пространстве, которое я ищу, существует только одно, если это имеет смысл.

Ответ №1:

Если это может быть один или другой, используйте CSS ИЛИ синтаксис, чтобы указать соответствие тому классу, который присутствует в списке:

 success = soup.select_one('.text-error, .text-success')
 

Ответ №2:

Хотя есть и более элегантные решения, я использовал try их для каждого имени класса. Т. е.

 try:
   success = soup.find('span', class_='text-success')
    ...
except:
    ...
try:
   success = soup.find('span', class_='text-success')
    ...
except:
    ...
 

И это сработало.