Проверка существования класса div возвращает ошибку - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь переписать записку с веб-страницы после того, как захожу на некоторые продукты с BeautifulSoup. Есть случай, когда товар больше не доступен. Веб-страница имеет класс div, подобный следующему, только на странице, на которой нет продукта

<div class="alert alert-danger">
    <p>There is an error</p>

Так я и делаю

if soup.find_all('div', {'class': 'alert'}):
    print('Alert...')

или

if soup.find_all('div', {'class': 'alert alert-danger'}):
    print('Alert...')

Но я получаю, что у объекта 'int' нет текста атрибута вместо продукта

Код статуса запроса 200

Как я могу это исправить и вместо пустого товара что-то показать?

Ответы [ 2 ]

2 голосов
/ 24 марта 2019

Хм, может быть, это ваше решение

from bs4 import BeautifulSoup
p = '<div class="alert alert-danger">\n<p>There is an error</p>'

alert = 'alert'    

soup = BeautifulSoup(p, 'html.parser').div['class']

if alert in list(soup):
    print("Alert....")
1 голос
/ 24 марта 2019

Я запустил содержимое , если из обоих примеров кода:

soup.find_all('div', {'class': 'alert'})

и

soup.find_all('div', {'class': 'alert alert-danger'})

В обоих случаях я получил:

[<div class="alert alert-danger">
 <p>There is an error</p>
 </div>]

Так что я не могу повторить вашу ошибку. Может быть, вы используете старую версию BeautifulSoup ?

У меня есть версия 4.7.1 . Попробуйте обновить вашу установку BeautifulSoup .

Редактировать

Еще один способ, как проверить, содержит ли ваш документ div элемент с class="alert":

if soup.find_all('div', class_='alert'):
    print("Alert....")

Обратите внимание, что параметр ключевого слова содержит _ в конце, чтобы отличается от Python восстановленное слово ( class ). Это относительно новый особенность BeautifulSoup .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...