使用BeautifulSoup Python提取span标记之间的数据
我想提取span标记之间的数据。下面是一个html代码示例:使用BeautifulSoup Python提取span标记之间的数据,python,beautifulsoup,Python,Beautifulsoup,我想提取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)
<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>
非常感谢您的帮助 试着这样做:
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
你可以用
可以使用BeautifulSoup的
.findAll(text=True)
获取元素内部的所有文本,包括跨距外部的文本。这将返回一个文本部分列表,其中需要去掉空格和引号。我不确定您使用什么规则来排除最后一个”(“5b
),但这可能与切片列表一样简单:
parts = soup.find("p").findAll(text=True)
name = ''.join(p.strip(string.whitespace + '"') for p in parts[:-3])
结果:
u'3-Acetyl-(4-acetyl-5-(β-naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one'
如果您喜欢单行程序,您可以执行以下操作:
(your_item.find("p", {"attr": "value"})).find("span").get_text()
您可能还需要从“-”和“(”)中去掉引号。使用rstrip和lstrip您可以做到这一点,需要注意的是,这会遗漏跨距之外的
“-”
(应为β-萘基)。
u'3-Acetyl-(4-acetyl-5-(β-naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one'
(your_item.find("p", {"attr": "value"})).find("span").get_text()