从Beautifulsoup中提取标签“extract”中的内容

时间:2014-03-01 05:12:42

标签: python beautifulsoup

我在xml中有一个语料库,其中一个标签名为extract <EXTRACT>。但该术语是Beautifulsoup中的关键字。如何提取此标记的内容。当我写entry.extract.text时,它会返回错误,当我使用entry.extract时,会提取整个内容。

根据我对Beautifulsoup的了解,它执行标签的大小写折叠。如果有一些方法可以解决这个问题,那么它对我也有帮助。

NB: 目前我用以下方法解决了这个问题。

extra = entry.find('extract')
absts.write(str(extra.text))

但我想知道是否有任何方法可以使用它,因为我们使用其他标签,例如entry.tagName

1 个答案:

答案 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,但已弃用,我不会推荐它。

希望有所帮助。