Python 3.x 使用BeautifulSoup选择合适的div类

Python 3.x 使用BeautifulSoup选择合适的div类,python-3.x,parsing,beautifulsoup,html-parsing,Python 3.x,Parsing,Beautifulsoup,Html Parsing,我有一个html,包含3种类型的div类: <div class="message"> <div class="message message__current"> <div class="message message__current message--grouped"> 它只选择div的类型2 但当我只想选择类型1时,我就这样做了 all_messages_1 = soup.find_all("div", class_="message") 它选择所

我有一个html,包含3种类型的
div
类:

<div class="message">
<div class="message message__current">
<div class="message message__current message--grouped">
它只选择
div
的类型2

但当我只想选择类型1时,我就这样做了

all_messages_1 = soup.find_all("div", class_="message")
它选择所有3种类型的
div


您能帮忙吗?

使用lambda选择每个具有class属性的div标记,它们与您想要的完全匹配

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

请注意,没有关闭标记的方式将被解释为所有标记都在HTML末尾关闭。因此,从第一个文本中选择文本将同时包含其他两个文本中的所有文本。同样地,从第二个选项中选择文本将得到第三个选项中的文本。

使用lambda选择每个具有class属性的div标记,使其与您想要的完全匹配

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

请注意,没有关闭标记的方式将被解释为所有标记都在HTML末尾关闭。因此,从第一个文本中选择文本将同时包含其他两个文本中的所有文本。同样,从第二个文本中选择文本也会从第三个文本中选择文本。

您忘了告诉我们您希望实现什么?选择第三个div或第二个div?首先,我只想选择
,并对内容执行一些操作。然后我只想选择
,并执行类似的操作。所以我在第二次选择上有问题。你忘了告诉我们你想要实现什么?选择第三个div或第二个div?首先,我只想选择
,并对内容执行一些操作。然后我只想选择
,并执行类似的操作。所以我对第二个选择有问题。@Dan Dev,谢谢你的演示。再加一个。在过去的几天里,我一直在努力理解lambda函数,看到您的演示,我似乎开始理解它了。然而,你能提供任何链接,我可以了解更多。再次感谢。@新手程序员快速的谷歌搜索会显示很多结果。快速浏览似乎涵盖了您想知道的大部分内容。谢谢@Dan Dev@Dan Dev,谢谢演示。再加一个。在过去的几天里,我一直在努力理解lambda函数,看到您的演示,我似乎开始理解它了。然而,你能提供任何链接,我可以了解更多。再次感谢。@新手程序员快速的谷歌搜索会显示很多结果。快速一瞥似乎涵盖了你想知道的大部分内容。谢谢你@Dan Dev
1
1
1