我在xml中有一个语料库,其中一个标签名为extract <EXTRACT>
。但该术语是Beautifulsoup中的关键字。如何提取此标记的内容。当我写entry.extract.text
时,它会返回错误,当我使用entry.extract
时,会提取整个内容。
根据我对Beautifulsoup的了解,它执行标签的大小写折叠。如果有一些方法可以解决这个问题,那么它对我也有帮助。
NB: 目前我用以下方法解决了这个问题。
extra = entry.find('extract')
absts.write(str(extra.text))
但我想知道是否有任何方法可以使用它,因为我们使用其他标签,例如entry.tagName
答案 0 :(得分:2)
根据BS源代码tag.tagname
实际调用tag.find("tagname")
。以下是__getattr__()
类的Tag
方法的外观:
def __getattr__(self, tag):
if len(tag) > 3 and tag.endswith('Tag'):
# BS3: soup.aTag -> "soup.find("a")
tag_name = tag[:-3]
warnings.warn(
'.%sTag is deprecated, use .find("%s") instead.' % (
tag_name, tag_name))
return self.find(tag_name)
# We special case contents to avoid recursion.
elif not tag.startswith("__") and not tag=="contents":
return self.find(tag)
raise AttributeError(
"'%s' object has no attribute '%s'" % (self.__class__, tag))
看到它完全基于find()
,所以在您的案例中使用tag.find("extract")
几乎没问题:
from bs4 import BeautifulSoup
data = """<test><EXTRACT>extract text</EXTRACT></test>"""
soup = BeautifulSoup(data, 'html.parser')
test = soup.find('test')
print test.find("extract").text # prints 'extract text'
此外,您可以使用test.extractTag.text
,但已弃用,我不会推荐它。
希望有所帮助。