python - 美汤去标
问题描述
如何从所有文本中删除上标?我有下面的代码可以获取所有可见的文本,但是脚注的上标把事情搞砸了。如何删除它们?
例如Active accounts (1),(2)
,(1),(2)
是可见的上标。
from bs4 import BeautifulSoup
from bs4.element import Comment
import requests
f_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 True
def 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)
解决方案
BeautifulSoup 函数find_all
返回输入中所有单个离散 HTML 元素的列表(这find_all
是在 BeautifulSoup 4 中使用的正确函数,并且优先于findAll
)。下一个函数filter
遍历此列表并删除其回调例程为其返回的项目False
。回调函数测试每个片段的标签名称,False
如果它在不想要的列表中,则返回,True
否则返回。
如果这些上标总是由正确的 HTML 标记指示,sup
那么您可以将其添加到回调函数中的不想要的列表中。
可能的陷阱是:
- 假设使用了文字(语义正确)标签
sup
,而不是例如仅在其 CSS中指定的类或跨度;vertical-align: superscript;
- 假设您要删除此上标标记中的所有元素。如果有例外(“20世纪”),您可以查看文本内容;例如,仅当其内容都是数字时才删除。如果有例外(“a 2 = b 2 + c 2 ”),您将不得不检查更广泛的上下文,或建立包含/排除的白名单或黑名单。
推荐阅读
- vba - VBA 数据透视表;错误“1004”参考无效
- amazon-web-services - 如何使用 moto 配置 AWS Firehose(Python AWS 模拟库)
- python - 使用 cv2.imread() 时出现 Python openCV 错误
- hbase - 如何使 HBASE 持久化并在刷新前从 Memstore 获取通知
- ios - 如何继续 Twitter 放弃对 Twitter SDK 的支持?
- node.js - 如何在填充方法中检查空对象 ID?
- java - 基于相机偏航的 3D 运动
- javascript - || 的目的是什么 在 JavaScript 变量中?
- javascript - 在 Firebase 中使用 onUpdate 函数时,如何检索已更新的记录?
- neural-network - 如何使用 Pytorch 的 Autograd 来反向传播多个层(矩阵)?