我有一个包含3种div
类的html:
<div class="message">
<div class="message message__current">
<div class="message message__current message--grouped">
当我这样做时
all_messages_2 = soup.find_all("div", class_="message message__current")
它只选择div
的第2类。
但是当我想只选择类型1时我会
all_messages_1 = soup.find_all("div", class_="message")
它会选择所有3种div
。
请帮忙吗?
答案 0 :(得分:3)
使用lambda选择每个div标签,其class属性与您想要的完全匹配。
from bs4 import BeautifulSoup
html = """
<div class="message">
<div class="message message__current">
<div class="message message__current message--grouped">
"""
soup = BeautifulSoup(html, 'html.parser')
tags = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['message'])
print (len(tags))
tags = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['message', 'message__current'])
print (len(tags))
tags = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['message', 'message__current', 'message--grouped'])
print (len(tags))
输出:
1
1
1
请注意,没有结束标记的方式将被解释为HTML末尾的所有标记。因此,从第一个文本中选择文本也将包含来自其他两个文本的所有文本。同样,从第二个文本中选择文本将包含第三个文本。