Python's strip () не работает - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий HTML-код, который я хочу очистить:

<div class="messaging-device">
     "
                 Text I want 
     "
     <span class="edit-panel">
          <a href="">Edit</a>
     </span>
</div>

И у меня есть следующий код Python для его очистки:

from bs4 import BeautifulSoup as bs
soup = bs(html, "lxml")
div = soup.find("div" {"class": "messaging-device"})
# div.get_text() returns 
# " 
#            Text I want
# Edit"
# so in order to get just "Text I want"
# I replaced div.get_text() with the following line
text = div.get_text().strip().split(" ", 1)[0]
print(text)

К сожалению, в тексте много завершающих строк новой строкипоэтому я изменил

text = div.get_text().strip().split(" ", 1)[0] 

на

text = div.get_text().strip().split(" ", 1)[0].strip()

Но это изменение полностью избавляет от "Текст, который я хочу".Кто-нибудь знает, что я могу правильно избавиться от запаздывающих строк?

1 Ответ

0 голосов
/ 07 июня 2018

Ваш код не опубликован.И даже после того, как я угадаю, как это исправить, он на самом деле не выполняет то, что вы утверждаете.Но я почти уверен, что знаю, где ошибка в любом случае.

Этот код не возвращает пустую строку, а ":

text = div.get_text().strip().split(" ", 1)[0].strip()

… и это не из-заstrip.Потому что, вопреки тому, что вы утверждаете, этот код не включает в себя текст, который вы хотите в первую очередь:

text = div.get_text().strip().split(" ", 1)[0]

… а скорее '"\n'.Так что, конечно, вычеркивание, которое дает вам пустую строку.


Если вы распечатаете промежуточные фрагменты, вы поймете, почему:

>>> div.get_text()
'\n     "\n                 Text I want \n     "\n     \nEdit\n\n'
>>> div.get_text().strip()
'"\n                 Text I want \n     "\n     \nEdit'
>>> div.get_text().strip().split(" ", 1)
['"\n', '                Text I want \n     "\n     \nEdit']
>>> div.get_text().strip().split(" ", 1)[0]
'"\n'
>>> div.get_text().strip().split(" ", 1)[0].strip()
'"'

Это выглядит так, как вы на самом деле хочу сделать, это найти текст между первыми двумя " символами, а затем разделить его на:

>>> div.get_text().strip().split('"', 2)[1].strip()
'Text I want'

Но я также думаю, что вы делаете вещи более сложными, чемони должны быть включены путем включения всего текста-потомка, а не только непосредственного дочернего текста.Если мы не имеем дело с частью Edit, все, что вам нужно, это просто текст, который вы хотите окружить сложным сочетанием пробелов, новых строк и кавычек ... которые мы можем вырезать сразу:

>>> div.contents[0]
'\n     "\n                 Text I want \n     "\n
>>> div.contents[0].strip(' \n"')
 'Text I want'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...