Как извлечь текст из тегов HTML? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть несколько html элементов, из которых я хочу извлечь текст.Так что html похоже на

<code><pre>
<span class="ansi-red-fg">ZeroDivisionError</span>Traceback (most recent call last)
<span class="ansi-green-fg">&lt;ipython-input-2-0f9f90da76dc&gt;</span> in <span class="ansi-cyan-fg">&lt;module&gt;</span><span class="ansi-blue-fg">()</span>

, где я хочу извлечь текст как

ZeroDivisionErrorTraceback (most recent call last)
<ipython-input-2-0f9f90da76dc> in<module>()

Я нашел ответ на этот вопрос здесь, но у меня это не работает.Полный пример кода

<code>from bs4 import BeautifulSoup as BSHTML

bs = BSHTML("""<pre>
<span class="ansi-red-fg">ZeroDivisionError</span>Traceback (most recent call last)
<span class="ansi-green-fg">&lt;ipython-input-2-0f9f90da76dc&gt;</span> in <span class="ansi-cyan-fg">&lt;module&gt;</span><span class="ansi-blue-fg">()</span>
"" ") print bs.font.contents [0] .strip ()

, где я получаю следующую ошибку:

Traceback (most recent call last):
  File "invest.py", line 13, in <module>
    print bs.font.contents[0].strip()
AttributeError: 'NoneType' object has no attribute 'contents'

Что-то мне не хватает? Версия beautifulsoap: 4.6.0

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы хотите, чтобы все текстовое содержимое этого блока pre?

print bs.pre.text

Возвращает:

ZeroDivisionErrorTraceback (most recent call last)
<ipython-input-2-0f9f90da76dc> in <module>()
0 голосов
/ 22 ноября 2018

.font в вашем примере кода относится к тегу HTML <font>.Поскольку вместо этого вы просматриваете весь текст из своего документа, вы можете использовать что-то вроде этого:

contents = bs.find_all(text=True)
for c in contents:
    print(c)  # replace this with whatever you're trying to do

Вывод:

ZeroDivisionError
Traceback (most recent call last)

<ipython-input-2-0f9f90da76dc>
 in
<module>
()

В настоящее время bs.font равно None, потому что выанализирует документ, который не содержит тегов <font>.

Если вы просто хотите, чтобы содержимое представляло собой одну длинную строку, вы можете получить это, просто используя bs.text

'\nZeroDivisionErrorTraceback (most recent call last)\n<ipython-input-2-0f9f90da76dc> in <module>()\n'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...