【问题标题】:Suggestions on get_text() in BeautifulSoupBeautifulSoup 中关于 get_text() 的建议
【发布时间】:2013-04-20 13:41:03
【问题描述】:

我正在使用 BeautifulSoup 来解析 html 页面中的一些内容。

我可以从 html 中提取我想要的内容(即包含在由 class myclass 定义的 span 中的文本)。

result = mycontent.find(attrs={'class':'myclass'})

我得到这个结果:

<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span>

如果我尝试使用以下方法提取文本:

result.get_text()

我得到:

Lorem ipsumdolor sit amet,consectetur...

正如您所看到的,当标签 &lt;br&gt; 被删除时,内容之间不再有空格,并且两个单词被连接起来。

我该如何解决这个问题?

【问题讨论】:

  • 使用 'contents' ,然后替换
    ?
  • 你能把这个放到一个例子中以便我接受答案吗?谢谢
  • 现在在 iPhone 上。需要靠近计算机来创建经过测试的代码。我希望其他人同时为你创造榜样。

标签: python beautifulsoup


【解决方案1】:

如果你使用的是 bs4,你可以使用strings:

" ".join(result.strings)

【讨论】:

  • 或者使用 kwarg 分隔符,它在 get_text 中做同样的事情:result.get_text('separator='" ") -> 'Lorem ipsum dolor sit amet, consectetur...'
【解决方案2】:

使用 'contents' ,然后替换 &lt;br&gt;?

这是一个完整的(工作的、经过测试的)示例:

from bs4 import BeautifulSoup
import urllib2

url="http://www.floris.us/SO/bstest.html"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

result = soup.find(attrs={'class':'myclass'})
print "The result of soup.find:"
print result

print "\nresult.contents:"
print result.contents
print "\nresult.get_text():"
print result.get_text()
for r in result:
  if (r.string is None):
    r.string = ' '

print "\nAfter replacing all the 'None' with ' ':"
print result.get_text()

结果:

The result of soup.find:
<span class="myclass">Lorem ipsum<br/>dolor sit amet,<br/>consectetur...</span>

result.contents:
[u'Lorem ipsum', <br/>, u'dolor sit amet,', <br/>, u'consectetur...']

result.get_text():
Lorem ipsumdolor sit amet,consectetur...

After replacing all the 'None' with ' ':
Lorem ipsum dolor sit amet, consectetur...

这比 Sean 的非常紧凑的解决方案更复杂 - 但既然我说过我会按照我在可能的情况下指出的路线创建和测试一个解决方案,我决定兑现我的承诺。您可以更好地看到这里发生了什么 - &lt;br/&gt;result.contents 元组中它自己的元素,但是当转换为字符串时,“什么都没有”。

【讨论】:

    【解决方案3】:

    result.get_text(separator=" ") 应该可以工作。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 2019-12-20
      • 1970-01-01
      • 2014-03-26
      • 2015-12-27
      • 1970-01-01
      • 2019-01-12
      • 2021-05-16
      • 2016-11-25
      相关资源
      最近更新 更多