BeautifulSoup问题

时间:2010-12-13 16:23:05

标签: python beautifulsoup

<parent1>
    <span>Text1</span>
</parnet1>
<parent2>
    <span>Text2</span>
</parnet2>
<parent3>
    <span>Text3</span>
</parnet3>

我用Python&amp;解析这个BeautifulSoup。我有一个变量 soupData ,它存储了need对象的指针。如何获取 parent2 的指针,例如,如果我有 Text2 文本。所以问题是按内容过滤span-tags。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

我认为没有办法一步到位。所以:

for parenttag in soupData:
    if parenttag.span.string == "Text2":
        do_stuff(parenttag)
        break

可以使用生成器表达式,但不会短得多。

答案 1 :(得分:1)

更正结束标记上的拼写后:

[e for e in soup(recursive=False, text=False) if e.span.string == 'Text2']

答案 2 :(得分:0)

使用python 2.7.6和BeautifulSoup 4.3.2我发现Marcelo给出了一个空列表的答案。然而,这对我有用:

[x.parent for x in bSoup.findAll('span') if x.text == 'Text2'][0]

或者,对于一个荒谬的过度设计的解决方案(至少对于这个特定的问题,但是如果您过长地过滤标准以便放入一个相当容易理解的列表表达式,那么它可能会有用)你可以做:

def hasText(text):
    def hasTextFunc(x):
        return x.text == text
    return hasTextFunc

创建一个函数工厂,然后

hasTextText2 = hasText('Text2')

filter(hasTextText2,bSoup.findAll('span'))[0].parent

获取您正在寻找的父标记的引用