关于美化组中获取文本()的建议

2024-05-13 11:47:06 发布

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

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

我可以从html中提取我想要的内容(即包含在由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...

正如您所看到的,当标签<br>被删除时,内容之间不再有间隔,两个单词被浓缩。

我怎样才能解决这个问题?


Tags: 文本br内容定义htmlmyclass页面result
3条回答

如果您使用的是bs4,则可以使用^{}

" ".join(result.strings)

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

使用“contents”,然后替换<br>

下面是一个完整的(工作、测试)示例:

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...

这比肖恩的非常简洁的解决方案要复杂得多,但是由于我说过我会按照我所指明的路线创建和测试一个解决方案,所以我决定兑现我的承诺。你可以更好地看到这里发生的事情-<br/>是它自己在result.contents元组中的元素,但是当转换成字符串时,“什么都没有了”。

相关问题 更多 >