Замените <br> пробелом в выводе BeautifulSoap

Я очищаю несколько ссылок с помощью BeautifulSoap, но, похоже, он полностью игнорирует теги <br>.

Вот соответствующая часть исходного кода URL-адреса I am соскоб:

<h1 class = "para-title">A quick brown fox jumps over<br>the lazy dog
<span id = "something">&#xe800;</span></h1>

Вот мой код BeautifulSoap (только соответствующая часть), чтобы получить текст внутри тегов h1:

    soup = BeautifulSoup(page, 'html.parser')
    title_box = soup.find('h1', attrs = {'class': 'para-title'})
    title = title_box.text.strip()
    print title

Это дает следующий результат:

    A quick brown fox jumps overthe lazy dog

В то время как я ожидаю:

    A quick brown fox jumps over the lazy dog

Как я могу заменить <br> на space в своем коде?

Приведенный выше фрагмент дает вывод A quick brown fox jumps overthe lazy dog some stuff here, как и должно быть.

DirtyBit 09.04.2019 12:03

Да, мой bad as span не содержит текста. Я отредактировал вопрос.

mumer91 09.04.2019 12:06
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
8
2
4 986
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Как насчет использования .get_text() с параметром-разделителем?

from bs4 import BeautifulSoup

page = '''<h1 class = "para-title">A quick brown fox jumps over<br>the lazy dog
<span>some stuff here</span></h1>'''


soup = BeautifulSoup(page, 'html.parser')
title_box = soup.find('h1', attrs = {'class': 'para-title'})
title = title_box.get_text(separator = " ").strip()
print (title)   

Выход:

print (title)
A quick brown fox jumps over the lazy dog
 some stuff here

Мои извинения за то, что теги span не содержат текста (вопрос отредактирован), так что это отлично сработало для меня. Спасибо.

mumer91 09.04.2019 12:09

Используйте функцию str.replace :
print title.replace("<br>", " ")

Использование replace("<br>", " ") на title не сработает. Вам нужно будет использовать его в необработанном HTML, прежде чем передавать его в BeautifulSoup.

Keyur Potdar 09.04.2019 12:11

Использование replace() в html перед синтаксическим анализом:

from bs4 import BeautifulSoup

html = '''<h1 class = "para-title">A quick brown fox jumps over<br>the lazy dog
<span>some stuff here</span></h1>'''

html = html.replace("<br>", " ")
soup = BeautifulSoup(html, 'html.parser')
title_box = soup.find('h1', attrs = {'class': 'para-title'})
title = title_box.get_text().strip()
print (title)

ВЫХОД:

A quick brown fox jumps over the lazy dog
some stuff here

РЕДАКТИРОВАТЬ:

Для части OP, упомянутой в комментариях ниже;

html = '''<div class = "description">Planet Nine was initially proposed to explain the clustering of orbits
Of Planet Nine's other effects, one was unexpected, the perpendicular orbits, and the other two were found after further analysis. Although other mechanisms have been offered for many of these peculiarities, the gravitational influence of Planet Nine is the only one that explains all four.
</div>'''

from bs4 import BeautifulSoup

html = html.replace("\n", ". ")
soup = BeautifulSoup(html, 'html.parser')
div_box = soup.find('div', attrs = {'class': 'description'})
divText= div_box.get_text().strip()
print (divText)

ВЫХОД:

Planet Nine was initially proposed to explain the clustering of orbits. Of Planet Nine's other effects, one was unexpected, the perpendicular orbits, and the other two were found after further analysis. Although other mechanisms have been offered for many of these peculiarities, the gravitational influence of Planet Nine is the only one that explains all four..

В другой части моего кода у меня есть разрывы строк в тексте (без br, только разрывы строк), которые я захватываю. Как заменить разрыв строки точкой и пробелом?

mumer91 09.04.2019 12:40

@ mumer91 Не могли бы вы опубликовать образец, пожалуйста?

DirtyBit 09.04.2019 12:40

Вот пример HTML и мой код: pastebin.com/Q8AnKvJy P.S. Я могу публиковать только один вопрос за 90 минут, поэтому использую pastebin. ;)

mumer91 09.04.2019 12:45

Спасибо, но я получаю сообщение об ошибке TypeError: объект NoneType не может быть вызван.

mumer91 09.04.2019 13:13

@ mumer91 вы скопировали и вставили код, который я разместил? Он протестирован и работает нормально. В какой строке вы получаете ошибку?

DirtyBit 09.04.2019 13:14

Я, наверное, перепутал вопрос. Можете ли вы посмотреть здесь для более подробной информации? stackoverflow.com/questions/55592384/…

mumer91 09.04.2019 14:01

@ mumer91 также разместил там решение, посмотрите, поможет ли оно?

DirtyBit 09.04.2019 14:13

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