Отображение символов при просмотре веб-сайта с помощью BeautifulSoup - PullRequest
1 голос
/ 29 апреля 2019

Я новичок в изучении веб-страниц. Я пытался решить проблему с отображением символов. BeautifulSoup используется для очистки сайта, но есть проблема с тем, как символы очищаются.

Это рабочий код:

soup = BeautifulSoup(message['content'], 'lxml') 
content = (None, soup2markup(soup.find(name='body')))

def soup2markup(self, soup: Any) -> List[Any]:
    for element in soup:
        if (element.name == 'span' and element.attrs and
            ('katex-display' in element.attrs.get('class', []) or
             'katex' in element.attrs.get('class', []))):
            markup.append(element.text)
    return markup

Печать markup, то есть отображение выделенного текста для символа, такого как π (чей текст katex $$\pi$$), дает мне

π \ piπ

вместо

π .

Почему это происходит и как это исправить?

<div class="message_content rendered_markdown">
<p>
<span class="katex">
<span class="katex-mathml">
<math>
<semantics>
<mrow>
<mi>π</mi>
</mrow>
<annotation encoding="application/x-tex">\pi</annotation>
</semantics>
</math>
</span>
<span aria-hidden="true" class="katex-html">
<span class="strut" style="height:0.43056em;">
</span>
<span class="strut bottom" style="height:0.43056em;vertical-align:0em;">
</span>
<span class="base">
<span class="mord mathit" style="margin-right:0.03588em;">π</span>
</span>
</span>
</span>
</p>
</div>

1 Ответ

0 голосов
/ 29 апреля 2019

Я не могу воспроизвести вашу проблему напрямую - ваш код не работает для меня. Однако, учитывая этот промежуток, s

<span class="katex-mathml">
<math>
<semantics>
<mrow>
<mi>π</mi>
</mrow>
<annotation encoding="application/x-tex">\pi</annotation>
</semantics>
</math>
</span>

Мы видим, что доступ к его атрибуту text показывает проблему:

>>> s.text
'\n\n\n\nπ\n\n\\pi\n\n\n'
>>> print(s.text.replace('\n', ''))
π\pi

Таким образом, решение заключается в применении более точных критериев поиска, например:

>>> m = s.find(name='mi')
>>> m
<mi>π</mi>
>>> m.text
'π'
...