我是网络爬虫的新手。我试图解决有关如何显示符号的问题。 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>
答案 0 :(得分:0)
我无法直接重现您的问题-您的代码对我不起作用。但是,鉴于此跨度,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
'π'