使用BeautifulSoup选择合适的div类

时间:2018-02-22 18:28:38

标签: python-3.x parsing beautifulsoup html-parsing

我有一个包含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

请帮忙吗?

1 个答案:

答案 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末尾的所有标记。因此,从第一个文本中选择文本也将包含来自其他两个文本的所有文本。同样,从第二个文本中选择文本将包含第三个文本。