代码之家  ›  专栏  ›  技术社区  ›  jason

美化组上标不是“sup”

  •  0
  • jason  · 技术社区  · 6 年前

    我可以从下页中删除上标:

    https://www.sec.gov/Archives/edgar/data/1633917/000163391718000094/exhibit991prq12018pypl.htm

    有了这篇文章: Beautiful soup remove superscripts

    但现在我有一个上标没有标记 sup

    https://www.sec.gov/Archives/edgar/data/1549802/000110465918031489/a18-13128_1ex99d1.htm

    在后面 Net revenues 是上标 1 那没有 啜饮 标签。

    如何从文本中删除此上标,如此处的帖子: 靓汤摘标 ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jake Conkerton-Darby    6 年前

    所讨论的元素的格式如下:

    <font size="1" style="font-size:6.5pt;font-weight:bold;position:relative;top:-3.0pt;">1</font>
    

    所以我们可以看到他们正在用一种字体格式化文本,这种字体的重要部分是 position:relative top: 价值观。我会亲自编写一个可以扩展的函数来检测上标并删除它们。例如:

    def Remove_Superscripts(soup):
        # Simple superscript extraction
        for element in soup.find_all('sup'):
            element.extract()
    
        # More complex superscript extraction for this example:
        for element in soup.find_all(lambda e: e and e.name == 'font' and e.has_attr('style') and
                                               'position:relative' in e['style'] and
                                               'top:' in e['style']:
            element.extract()
    

    这是一个非常懒惰和混乱的例子,但是它应该让您了解如何删除没有用 <sup\> 标签。不幸的是,每次遇到有人以不同方式构造上标的新情况时,您都需要扩展和修改此方法(我将尽可能使其开放和通用)。

        2
  •  0
  •   bobrobbob    6 年前

    像这样的:

    fonts = soup.select('font[style*="position:relative"]')
    for font in fonts:
        font.decompose()