Ответ 1
Если вы используете bs4, вы можете использовать strings
:
" ".join(result.strings)
Я использую BeautifulSoup для анализа некоторого содержимого с html-страницы.
Я могу извлечь из html содержимое, которое я хочу (т.е. текст, содержащийся в span
, определяемый классом class
myclass).
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>
удален, интервал между содержимым больше, а два слова конкретизированы.
Как я могу решить эту проблему?
Если вы используете bs4, вы можете использовать strings
:
" ".join(result.strings)
Используйте '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...
Это более сложное решение, чем Sean очень компактное решение, но, поскольку я сказал, что создаю и протестирую решение в соответствии с тем, что я указал, когда смогу, я решил выполнить свое обещание. Вы можете увидеть немного лучше, что здесь происходит - <br/>
- это его собственный элемент в кортеже result.contents
, но при преобразовании в строку там ничего не осталось.
result.get_text(separator=" ")
должен работать.