为了账号安全,请及时绑定邮箱和手机立即绑定

美丽的汤去除上标

美丽的汤去除上标

慕斯709654 2021-04-08 18:15:04
如何从所有文本中删除上标?我下面的代码可以获取所有可见的文本,但是脚注的上标使事情变得混乱。如何删除它们?例如Active accounts (1),(2),(1),(2)是可见的上标。from bs4 import BeautifulSoupfrom bs4.element import Commentimport requestsf_url='https://www.sec.gov/Archives/edgar/data/1633917/000163391718000094/exhibit991prq12018pypl.htm'def tag_visible(element):    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:        return False    if isinstance(element, Comment):        return False    return Truedef text_from_html(body):    soup = BeautifulSoup(body, 'html.parser')    texts = soup.findAll(text=True)    visible_texts = filter(tag_visible, texts)      return u" ".join(t.strip() for t in visible_texts)html = requests.get(f_url)text= text_from_html(html.text)
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

BeautifulSoup函数find_all返回输入中所有单个离散HTML元素的列表(这find_all是在BeautifulSoup 4中使用的适当函数,优于findAll)。下一个函数filter遍历此列表,并删除其回调例程返回的项目False。回调函数会测试每个代码段的标签名称,False如果不想要的列表中包含该标签,则返回True

如果这些上标始终由正确的HTML标记指示,sup则可以将其添加到回调函数中不需要的列表中。

可能的陷阱是:

  1. 假定使用文字(在语义上正确)标签sup,而不是使用仅在其CSS中指定 的类或跨度vertical-align: superscript;

  2. 假定您要摆脱此上标标记中的所有元素。如果有异常(以下简称“20世纪”),你可以检查的文本内容; 例如,仅当内容全部为数字时才删除。如果也有例外的是(“A 2 = B 2 + C 2 ”),则必须检查一个更广泛的背景,或建立一个白名单或夹杂物/排除的黑名单。


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信