【问题标题】:Displaying symbols when scraping a website using BeautifulSoup使用 BeautifulSoup 抓取网站时显示符号
【发布时间】:2019-09-17 17:27:55
【问题描述】:

我是网络抓取的新手。我试图解决有关符号如何显示的问题。 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>

【问题讨论】:

  • 与你的问题无关,但我认为那些类型注释不应该是Any...

标签: python web-scraping beautifulsoup symbols


【解决方案1】:

我无法直接重现您的问题 - 您的代码对我不起作用。但是考虑到这个跨度,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
'π'

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 2020-12-22
    • 1970-01-01
    • 2020-05-30
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多