如何使用beautifulsoup获得span中的多个类?

2024-06-16 08:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用beautifulsoup在<p>中获得span类

HTML有点像这样

...
<p class="card-list">
<span class="span1 class1"></span>
<span class="span2 class2"></span>
<span class="span3 class3"></span>
<span class="span4 class4"></span>
</p>

我使用的代码是

soup = BeautifulSoup(page.read(), "html.parser")
services = soup.find_all('li', {'class': 'card-list'})

for eachclass in services:
    classes = []
    for spans in eachclass.find('p', {'class':'card-info'}):
        for element in spans.find_all(class_=True):
            classes.extend(element["class"])
        print(classes)

我得到的结果是

classes = ["span1", "class1", "span2", "class2","span3", class3","span4", "class4"]

我想要的是

classes = ["span1 class1", "span2 class2","span3 class3","span4 class4"]

还有其他的<span>。我只需要<p class="card-list">标记中的<span>


Tags: forfindcardlistclassclassesspanclass1
3条回答

试着这样做:

cards = """
<p class="card-list">
<span class="span1 class1"></span>
<span class="span2 class2"></span>
<span class="span3 class3"></span>
<span class="span4 class4"></span>
</p>
"""
from bs4 import BeautifulSoup as bs
soup = bs(cards,'lxml')
classes = []
for c in soup.select('span'):
    elem = ' '.join(map(str, c['class'])) 
    classes.append(elem)
print(classes)

输出:

['span1 class1', 'span2 class2', 'span3 class3', 'span4 class4']

请尝试以下代码

from bs4 import BeautifulSoup
html = """
<p class="card-list">
<span class="span1 class1"></span>
<span class="span2 class2"></span>
<span class="span3 class3"></span>
<span class="span4 class4"></span>
</p>
"""

soup = BeautifulSoup(html,'html.parser')
allclasses = []
for item in soup.find('p',class_='card-list').find_all('span'):
    classes=' '.join(item.attrs['class'])
    allclasses.append(classes)
print(allclasses)

输出

['span1 class1', 'span2 class2', 'span3 class3', 'span4 class4']

已更新

allclasses = []
for item in soup.select("p[class='contact-info '] span[class]"):
    classes=' '.join(item.attrs['class'])
    allclasses.append(classes)
print(allclasses)

我通过创建一个列表并附加每个span的两个class,然后用' '.join(listname)连接它们来解决这个问题 后来,我把那个列表添加到另一个列表中

相关问题 更多 >