在我的工作中,我们使用的是我们创建的标签。其中一个名为can-edit的标签,在代码中看起来像这样(例如):
<h1 can-edit="banner top text" class="mainText">some text</h1>
<h2 can-edit="banner bottom text" class="bottomText">some text</h2>
它可以在任何标签内(img,p,h1,h2,div ......)。
我希望获得的是页面中的所有可编辑标签,例如上面的HTML:
['banner top text', 'banner bottom text']
我试过
soup = BeautifulSoup(html, "html.parser")
can_edits = soup.find_all("can-edit")
但它找不到任何。
答案 0 :(得分:6)
我试过
soup = BeautifulSoup(html, "html.parser") can_edits = soup.find_all("can-edit")
但它找不到任何。
这不起作用的原因是因为在这里您查找名称为can-edit
的标记,因此<can-edit ...>
,因此无效。
您可以使用汤的find_all
功能查找具有特定属性的所有标签。例如:
soup.find_all(attrs={'can-edit': True})
所以我们在这里使用attrs
参数并向其传递一个属性,该属性表示我们会过滤具有can-edit
属性的标记。这将为我们提供一个带有can-edit
属性的标记列表(无论值是多少)。如果我们现在想要获取该属性的值,我们可以得到它的['can-edit']
项,这样我们就可以编写一个列表解析:
all_can_edit_attrs = [tag['can-edit']
for tag in soup.find_all(attrs={'can-edit': True})]
或完整的工作版本:
from bs4 import BeautifulSoup
s = """<h1 can-edit="banner top text" class="mainText">some text</h1>
<h2 can-edit="banner bottom text" class="bottomText">some text</h2>"""
bs = BeautifulSoup(s, 'lxml')
all_can_edit_attrs = [tag['can-edit']
for tag in soup.find_all(attrs={'can-edit': True})]