【问题标题】:How to use python beautiful soup to get only the level 1 navigableText?如何使用python美汤只获取1级navigableText?
【发布时间】:2013-06-15 08:53:21
【问题描述】:

我正在使用漂亮的汤从这个示例 html 代码中获取文本:

....
<div style="s1">
    <div style="s2">Here is text 1</div>
    <div style="s3">Here is text 2</div>
Here is text 3 and this is what I want.
</div>
....

文本 1 和文本 2 处于同一级别 2,文本 3 处于上层 1。我只想获取文本 3 并使用此:

for anchor in tbody.findAll('div', style="s1"):
    review=anchor.text
    print review

但是这些代码让我得到了所有的文本 1,2,3。如何只获取第一级文本3?

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    也许你想要的是

    tbody.findAll('div', style="s1")[0].string
    

    或您要查找的任何 div.s1 的索引。

    【讨论】:

      【解决方案2】:

      类似:

      for anchor in tbody.findAll('div', style="s1"):
          text = ''.join([x for x in anchor.contents if isinstance(x, bs4.element.NavigableString)])
      

      有效。只要知道你也会在那里换行,所以.strip()ing 可能是必要的。

      例如:

      for anchor in tbody.findAll('div', style="s1"):
          text = ''.join([x for x in anchor.contents if isinstance(x, bs4.element.NavigableString)])
          print([text])
          print([text.strip()])
      

      打印

      [u'\n\n\nHere is text 3 and this is what I want.\n']
      [u'Here is text 3 and this is what I want.']
      

      (我将它们放在列表中,以便您可以看到换行符。)

      【讨论】:

      • 我运行了代码,它显示 bs4 没有定义。我正在使用python2.7.4,并且顶部确实有“从bs4导入BeautifulSoup”行。如何修改您的“bs4.element.NavigableString”部分?
      • 只需在您的导入中添加import bs4。或者,添加from bs4.element import NavigableString 并将我列出的代码的bs4.element.NavigableString 部分更改为简单的NavigableString。任何一个都可以。
      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2017-09-11
      • 1970-01-01
      相关资源
      最近更新 更多