我使用BeautifulSoup来解析html页面中的一些内容。
我可以从html中提取我想要的内容(即span
myclass定义的class
中包含的文本)。
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>
被删除时,内容之间没有更多的间距,并且两个单词被合并。
我该如何解决这个问题?
答案 0 :(得分:22)
如果您使用的是bs4,则可以使用strings
:
" ".join(result.strings)
答案 1 :(得分:13)
使用'内容',然后替换<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...
这比Sean非常紧凑的解决方案更精细 - 但是因为我说过我会创建并测试我能够指示的解决方案,我决定遵循我的承诺。你可以看到这里发生的事情好一点 - <br/>
是result.contents
元组中它自己的元素,但是当转换为字符串时,“没有任何东西”。
答案 2 :(得分:2)
result.get_text(separator=" ")
应该可以工作。