python if语句文本

x =(soup.find_all('p'))
if (x.find('British dishes') != -1): 
    print ("TRUE")
else: 
    print ("FALSE")

你好,我是 beautifulsoup 的新手,如果P标签匹配或包含特定文本,我正在尝试打印 TrueFalse .

我可以打印p标签的内容,但是无法输出true或false成功 . 例如TRUE P tag contain "British dishes"

给我这些错误信息:

ResultSet对象没有属性'%s' . 您可能正在处理像单个项目的项目列表 . 当你打算调用find()时,你调用了find_all()吗?“%key AttributeError:ResultSet对象没有属性'find' . 你可能正在处理像单个项目一样的项目列表 . 你有没有调用find_all()你打算叫find()?

这是我从'p'回来的文字[

Ivy酒店在中央餐厅无需预订即可迎接客人,那里提供点菜和套餐菜单

在伦敦最着名的餐厅之一,为朋友或爱人提供独特的午餐或晚餐体验

常 Spring 藤的全天菜单包括常 Spring 藤经典菜肴以及现代英式菜肴,每天中午12点至深夜供应

在鸡尾酒吧,酒吧经理Darren Ball的鸡尾酒会向The Ivy的历史致敬,其中包括来自The Roaring Twenties的标志性饮品以及Pina Coladas和Strawberry Daiquiris等媚俗经典饮品 .

Ivy酒店的中央餐厅无需预订即可欢迎客人入住,那里提供A La Carte和Tabled'hôte菜单 .

如需预订餐桌,请致电020 7836 4751或在线预订here .

Ivy酒店的中央餐厅无需预订即可欢迎客人入住,那里提供A La Carte和Tabled'hôte菜单

来自伦敦最受欢迎的餐厅的最新更新,活动和菜单 .

  • 必须填写

    我们希望通过独家新闻和提前预订机会与您保持联系 . 我们将就特殊活动,新开业以及最新的季节性菜单与您联系 . 我们会保证您的数据安全,当然绝不会出售或共享数据 . 您可以随时通过点击取消订阅收到的任何电子邮件或点击我们网站上的链接来改变主意 . 有关我们的数据政策和保护的更多详细信息 .
    ]

回答(1)

2 years ago

在您的示例中,您需要使用循环遍历每个 <p> 标记文本,并确保在一种情况下搜索文本,这可能是小写的,因为 British DishesBritish dishes 将不匹配 . 您也没有在 <p> 元素上调用 .text ,这些元素不会从标记中提取文本 .

Fixed code:

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")

Note:TrueFalse 可用时,不需要打印 "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