Как предотвратить BeautifulSoup от зачистки линий - PullRequest
1 голос
/ 07 июня 2010

Я пытаюсь перевести онлайн-страницу HTML в текст.

У меня проблема с этой структурой:

<div align="justify"><b>Available in  
<a href="http://www.example.com.be/book.php?number=1">
French</a> and 
<a href="http://www.example.com.be/book.php?number=5">
English</a>.
</div>

Вот его представление в виде строки Python:

'<div align="justify"><b>Available in  \r\n<a href="http://www.example.com.be/book.php?number=1">\r\nFrench</a>; \r\n<a href="http://www.example.com.be/book.php?number=5">\r\nEnglish</a>.\r\n</div>'

При использовании:

html_content = get_html_div_from_above()
para = BeautifulSoup(html_content)
txt = para.text

BeautifulSoup переведет его (в переменную 'txt') как:

u'Available inFrenchandEnglish.'

Вероятно, он удаляет каждую строку в исходной HTML-строке.

У вас есть чистое решение этой проблемы?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Я наконец-то получил хорошее решение:

def clean_line(line):
    return re.sub(r'[ ]{2,}', ' ', re.sub(r'[\r\n]', '', line))

html_content = get_html_div_from_above()
para = BeautifulSoup(html_content)
''.join([clean_line(line) for line in para.findAll(text=True)])

Какие выходы:

u'Available in French and English.  '
1 голос
/ 07 июня 2010

Я получил решение:

html_content = get_html_div_from_above()
para = BeautifulSoup(html_content)
txt = para.getText(separator=' ')

Но это не оптимально, потому что ставит пробелы между каждым тегом:

u'Available in French and English .  '

Обратите внимание на пробел перед точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...