BeautifulSoup.get_text () игнорирует разрывы строк <br> - PullRequest
0 голосов
/ 25 апреля 2020

У меня установлена ​​Beautifulsoup4 (4.9.0), и я пытаюсь проанализировать html. Python версия 3.7

Я собираю данные из некоторых таблиц, которые разбиты по ячейкам <br> внутри ячеек, например:

<td>some text<br>some more text</td>

Однако .get_text(), похоже, игнорирует разрывы строк и выводите все int в одну строку:

html = '<td>some text<br>some more text</td>'
soup = BeautifulSoup(html, features='html.parser')

print(soup)
 >> <td>some text<br/>some more text</td>

print(soup.get_text())
 >> some textsome more text

<br> преобразуется в <br/>, но я не знаю много HTML, поэтому не уверен, что это важно.

Желаемый результат

Список строк, которые находятся между каждым переводом строки. Я думал о том, чтобы использовать метод .get_text(), а затем .split() полученную строку с помощью символа разрыва строки, например:

html = '<td>some text<br>some more text</td>'
soup = BeautifulSoup(html, features='html.parser')
strings = soup.get_text().split('?')
  >> ['some text', 'some more text']

Кто-нибудь знает, как заставить get_text() распознавать разрывы строк, и что за ? должно быть? Я подумал, может быть, заменить разрывы строк однозначным символом / строкой, которые не будут проигнорированы, и разделены этим. Буду признателен за более элегантные решения!

Спасибо

1 Ответ

1 голос
/ 25 апреля 2020

Мое решение, как описано в вопросе. Заменив тег <br> однозначной строкой, а затем разделив строку следующим образом:

from bs4 import BeautifulSoup

html = '<td>some text<br>some more text</td>'
soup = BeautifulSoup(html, features='html.parser')
delimiter = '###'                           # unambiguous string
for line_break in soup.findAll('br'):       # loop through line break tags
    line_break.replaceWith(delimiter)       # replace br tags with delimiter
strings = soup.get_text().split(delimiter)  # get list of strings
  >> ['some text', 'some more text']        # output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...