Я очищаю несколько ссылок с помощью BeautifulSoap, но, похоже, он полностью игнорирует теги <br>
.
Вот соответствующая часть исходного кода URL-адреса I am соскоб:
<h1 class = "para-title">A quick brown fox jumps over<br>the lazy dog
<span id = "something"></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
в своем коде?
Да, мой bad as span не содержит текста. Я отредактировал вопрос.
Как насчет использования .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 не содержат текста (вопрос отредактирован), так что это отлично сработало для меня. Спасибо.
Используйте функцию str.replace
:print title.replace("<br>", " ")
Использование replace("<br>", " ")
на title
не сработает. Вам нужно будет использовать его в необработанном HTML, прежде чем передавать его в BeautifulSoup.
Использование 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 Не могли бы вы опубликовать образец, пожалуйста?
Вот пример HTML и мой код: pastebin.com/Q8AnKvJy P.S. Я могу публиковать только один вопрос за 90 минут, поэтому использую pastebin. ;)
Спасибо, но я получаю сообщение об ошибке TypeError: объект NoneType не может быть вызван.
@ mumer91 вы скопировали и вставили код, который я разместил? Он протестирован и работает нормально. В какой строке вы получаете ошибку?
Я, наверное, перепутал вопрос. Можете ли вы посмотреть здесь для более подробной информации? stackoverflow.com/questions/55592384/…
@ mumer91 также разместил там решение, посмотрите, поможет ли оно?
Приведенный выше фрагмент дает вывод
A quick brown fox jumps overthe lazy dog some stuff here
, как и должно быть.