如何從所有文本中刪除上標?我下面的代碼可以獲取所有可見的文本,但是腳注的上標使事情變得混亂。如何刪除它們?例如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條經(jīng)驗 獲得超5個贊
BeautifulSoup函數(shù)find_all
返回輸入中所有單個離散HTML元素的列表(這find_all
是在BeautifulSoup 4中使用的適當函數(shù),優(yōu)于findAll
)。下一個函數(shù)filter
遍歷此列表,并刪除其回調(diào)例程返回的項目False
?;卣{(diào)函數(shù)會測試每個代碼段的標簽名稱,False
如果不想要的列表中包含該標簽,則返回True
。
如果這些上標始終由正確的HTML標記指示,sup
則可以將其添加到回調(diào)函數(shù)中不需要的列表中。
可能的陷阱是:
假定使用文字(在語義上正確)標簽
sup
,而不是使用僅在其CSS中指定 的類或跨度vertical-align: superscript;
;假定您要擺脫此上標標記中的所有元素。如果有異常(以下簡稱“20日世紀”),你可以檢查的文本內(nèi)容; 例如,僅當內(nèi)容全部為數(shù)字時才刪除。如果也有例外的是(“A 2 = B 2 + C 2 ”),則必須檢查一個更廣泛的背景,或建立一個白名單或夾雜物/排除的黑名單。
添加回答
舉報
0/150
提交
取消