Удаление `\n` с помощью bs4 get_text()

from bs4 import BeautifulSoup


# current output as below
"""
'DOMINGUEZ, JONATHAN D. VS. RAMOS,\n
                                           SILVIA M'
"""

# desired one is

#  DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M

x = """<td width = "350px" valign = "top"
   style = "padding:.5rem;">
   DOMINGUEZ, JONATHAN D. VS. RAMOS,
   SILVIA M
</td>"""

soup = BeautifulSoup(x, 'lxml')
print(soup.select_one('td').get_text(strip=True, separator='\n'))

Я проверил документы и считаю, что get_text() может это сделать, но не знаю как!

Я не знаю, что у .get_text() есть такая способность. Однако вы можете обработать строку с помощью re: re.sub(r"\s{2,}", " ", soup.select_one("td").get_text(strip=True)).

Andrej Kesely 06.05.2022 01:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
78
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

изменить separator='\n' на separator=' '

Вы пробовали это?

Martin Evans 06.05.2022 12:23
Ответ принят как подходящий

Вам может понадобиться регулярное выражение, это также может избавиться от лишних пробелов:

from bs4 import BeautifulSoup
import re

x = """<td width = "350px" valign = "top"
   style = "padding:.5rem;">
   DOMINGUEZ, JONATHAN D. VS. RAMOS,
   SILVIA M
</td>"""

soup = BeautifulSoup(x, 'lxml')
text = re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))
print(text)

Предоставление:

DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M

Просто чтобы дать некоторый контекст - в этом случае get_text(strip=True) само по себе не будет работать, потому что текст в вашем <td> не "разделен" тегами и, точнее, не <br>, поэтому он будет распознан как одна "многострочная" строка, содержащая символы новой строки.

В результате этого обстоятельства параметр strip=True удаляет символы только слева и справа от всей строки.


Основываясь на следующем HTML, он будет работать с пробелом в качестве разделителя:

x = """<td width = "350px" valign = "top"
style = "padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,<br> 
SILVIA M

</td>"""

soup = BeautifulSoup(x)
soup.td.get_text(' ',strip=True)

Но без какого-либо тега, включенного в строку в качестве возможного разделителя, я бы рекомендовал использовать ответ @Мартин Эванс с использованием regex, который также очень хорошо обрабатывает несколько пробелов.

re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))

Другие вопросы по теме