【问题标题】:BeautifulSoup questionBeautifulSoup 问题
【发布时间】:2010-12-13 16:23:05
【问题描述】:
<parent1>
    <span>Text1</span>
</parnet1>
<parent2>
    <span>Text2</span>
</parnet2>
<parent3>
    <span>Text3</span>
</parnet3>

我正在用 Python 和 BeautifulSoup 解析这个。我有一个变量 soupData 存储需要对象的指针。如何获取 parent2 的指针,例如,如果我有文本 Text2。所以问题是按内容过滤跨度标签。我该怎么做?

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    更正结束标签的拼写后:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        使用 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
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          • 2020-05-08
          • 2011-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多