Python if текст заявления - PullRequest
       3

Python if текст заявления

0 голосов
/ 10 декабря 2018
x =(soup.find_all('p'))
if (x.find('British dishes') != -1): 
    print ("TRUE")
else: 
    print ("FALSE") 

Привет, я новичок в beautifulsoup, и я пытаюсь напечатать либо True, либо False, если тег P соответствует или содержит определенный текст.

Я могу напечататьсодержимое тега p, но просто не может вывести истину или ложь успешно.Например, тег TRUE P содержит «британские блюда»

Получите информацию об ошибке:

Объект ResultSet не имеет атрибута "% s".Вы, вероятно, рассматриваете список предметов как отдельный предмет.Вы вызывали find_all (), когда намеревались вызвать find ()? "% Key AttributeError: у объекта ResultSet нет атрибута 'find'. Вы, вероятно, рассматриваете список элементов как один элемент. Вы вызывали find_all (), когдаВы хотели позвонить find ()?

Это текст, который я получил от 'p' [

Ivy приветствует клиентов без предварительных заказов в центральном обеденном баре, где A La Carte иОба набора меню подаются

,

Подарите другу или близкому человеку уникальный обед или ужин в одном из самых известных лондонских ресторанов

,

В течение всего дня в меню Ivy есть классика Ivy наряду с современнойБританские блюда, которые подаются ежедневно с 12 до позднего вечера

,

В коктейль-баре коктейль-бар Даррена Болл предлагает салютам историю Ivy с культовыми напитками из «Ревущих двадцатых» и классическими китчами, такими как Pina Coladas и Strawberry Daiquiris.

,

Ivy приветствует клиентов без предварительных заказов в центральном обеденном баре, где A La Carte иd Обе таблицы обслуживают оба меню.

,

Чтобы забронировать столик, позвоните по номеру 020 7836 4751 или закажите онлайн здесь .

,

Ivy приветствует клиентов безбронирование в центральном обеденном баре, где подают меню A La Carte и Table d'hôte

,

Для получения последних обновлений, событий и меню из любимых лондонских ресторанов.

,

* Обязательноfields

,

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

]

1 Ответ

0 голосов
/ 10 декабря 2018

В вашем примере вам нужно пройти через каждый текстовый тег <p> с помощью цикла, и убедиться, что вы ищете текст в одном регистре, который может быть строчными, так как British Dishes и British dishes не будет соответствовать.Вы также не вызываете .text для элементов <p>, которые не извлекают текст из тега.

Фиксированный код:

x = soup.find_all('p')
for y in x:
    lowercase = y.text.lower()
    if lowercase.find("british dishes") != -1:
        print("TRUE")
    else:
        print("FALSE")

Который теперь печатает:

FALSE
FALSE
TRUE   # --> line has 'British dishes'
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE

В качестве альтернативы, вы можете просто использовать вместо этого оператор inиз str.find():

for x in soup.find_all('p'):
    lowercase = x.text.lower()
    if 'british dishes' in lowercase:
        print ("TRUE")
    else: 
        print ("FALSE") 

Примечание: Печать "TRUE" и "FALSE" не требуется, если доступны True и False.Вы можете просто использовать print(True) и print(False) вместо этого здесь.

Вы можете также обернуть поиск в функции и просто распечатать логический результат:

def line_result(line, to_find):
    return to_find in line.lower()

for x in soup.find_all('p'):
    print(line_result(line=x.text, to_find='british dishes'))

Если вы хотите вернуть все это в один результат, вы можете использовать any() здесь:

print(any("british dishes" in x.text.lower() for x in soup.find_all("p")))
# True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...