如何从所有文本中删除上标?我下面的代码可以获取所有可见的文本,但是脚注的上标使事情变得混乱。如何删除它们?
例如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)
答案 0 :(得分:2)
BeautifulSoup函数find_all
返回输入中所有单个离散HTML元素的列表(find_all
是在BeautifulSoup 4中使用的正确函数,优于findAll
)。下一个函数filter
将遍历此列表,并删除其回调例程返回False
的项目。回调函数将测试每个代码段的标记名,如果它们不在不需要的列表中,则返回False
,否则返回True
。
如果这些上标始终由正确的HTML标记sup
指示,则可以将其添加到回调函数中不需要的列表中。
可能的陷阱是:
sup
,例如,不使用仅指定 vertical-align: superscript;
的类或跨度CSS;