Beautifulsoup способ получить строковое значение тега, только если он существует в сжатой форме? - PullRequest
0 голосов
/ 03 июля 2019

Когда я хочу получить текст <Dressing>Italian</Dressing>:

salad = BeautifulSoup(salad_response.content, 'xml')
dressing = salad.find('Dressing').string

К сожалению, если не найдено никакого перевязочного узла, возникает следующее исключение:

*** AttributeError: 'NoneType' object has no attribute 'string'

Итак, я должен сначала проверить:

dressing = salad.find('Dressing')
if salad.find('Dressing'):
    dressing = salad.find('Dressing')

Могу ли я сделать это более кратко?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы можете использовать if.. else в режиме oneline.

dressing = salad.find('Dressing').string if salad.find('Dressing') else None

Синтаксис:
A if condition else B
Если условие выполнено, то сделай A, а потом B.

0 голосов
/ 03 июля 2019

Вы можете использовать переменную в условии if.

dressing = salad.find('Dressing')
if dressing:
    print(dressing.text)

Чтобы проверить ваш результат, вот примеры.

from bs4 import BeautifulSoup
data='''<Dressing>Italian</Dressing>'''
salad = BeautifulSoup(data, 'xml')
dressing = salad.find('Dressing')
if dressing:
    print(dressing.text)

Это вернет Italian

from bs4 import BeautifulSoup
data='''<Dressing1>Italian</Dressing1>'''
salad = BeautifulSoup(data, 'xml')
dressing = salad.find('Dressing')
if dressing:
    print(dressing.text)

Это ничего не вернет.

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