用BeautifulSoup Python在span标记之间提取数据

2024-05-16 20:44:00 发布

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

我想在span标记之间提取数据。下面是一个html代码示例:

<p>
    <span class="html-italic">3-Acetyl-</span>
    <span class="html-italic">(4-acetyl-5-(β</span>
    "-"
    <span class="html-italic">naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one</span>
     "("
    <b>5b</b>
</p>

我需要一个全名:

3-Acetyl-4-acetyl-5-(β-naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one(不带5b)。我不知道如何在第二个和第三个跨度标记之间提取“-”。此外,范围标记的总数可能会有所不同,并且在任何范围标记之间都可以有“-”。我写的代码只给了我:3-乙酰-4-乙酰-5-(β)。以下是我的代码:

p = soup.find("p")
name = ""
for child in p.children:
    if child.name == "span":
        name += child.text
print name

非常感谢您的帮助!


Tags: 代码name标记childhtmlclassspanitalic
3条回答

这样试试:

name=""
for x in soup.find('p'):
    try:
        if x.name == 'span':
            name += x.get_text()
    except:pass
print name

输出:

3-Acetyl-(4-acetyl-5-(βnaphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one

你可以做些

p = soup.find("p")
name = ""
for child in p.children:
    if child.name == "span":
        name += child.text
    elif child.name is 'None':
        name += child.string.rstrip("\"\n ").lstrip("\"\n ")
print name

你可以用CSS selectors

>>> ''.join(i.text for i in soup.select('p > span'))
'3-Acetyl-(4-acetyl-5-(βnaphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one'

相关问题 更多 >