漂亮的问题

2024-05-18 05:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在用Python&beauthoulsoup解析它。我有一个变量soupData,它存储needobject的指针。如何获取parent2的指针,例如,如果我有文本Text2。所以问题是根据内容过滤span标记。我该怎么做?在


Tags: 文本span指针text1beauthoulsouptext2text3parent2
3条回答

更正结束标记的拼写后:

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

使用python2.7.6和beautifulsoup4.3.2,我发现Marcelo的答案是给出一个空列表。不过,这对我很有效:

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

或者,对于一个可笑的过度设计的解决方案(至少对于这个特定的问题,但是如果您对条件进行过滤的时间太长而无法放入一个合理容易理解的列表表达式,则可能会有用),您可以:

^{pr2}$

创建函数工厂,然后

hasTextText2 = hasText('Text2')

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

获取对您要查找的父标记的引用

我不认为有一种方法可以一步到位。所以:

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

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

相关问题 更多 >