2010-12-13 68 views
0
<parent1> 
    <span>Text1</span> 
</parnet1> 
<parent2> 
    <span>Text2</span> 
</parnet2> 
<parent3> 
    <span>Text3</span> 
</parnet3> 

我用Python解析这个& BeautifulSoup。我有一个变量soupData它存储需要对象的指针。例如,如何获得指向父母2的指针,例如,如果我有文本Text2。所以问题是按内容过滤span标签。我怎样才能做到这一点?BeautifulSoup问题

回答

1

修正的结束标签拼写后:

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

我不认为有一种方法可以一步完成。因此:

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

可以使用生成器表达式,但不能太短。

0

使用Python 2.7.6和4.3.2 BeautifulSoup我发现了马塞洛的答案,给出一个空列表。这为我工作,但是:

[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 

得到参考父标记使y ou正在寻找