python - 如何从html文件中删除所有不必要的标签和符号?

标签 python html parsing beautifulsoup xbrl

我正在尝试使用 Python 的 BeautifulSoup 或 HTMLParser 从 SEC EDGAR 系统上的 10-K 报告(例如公司的代理报告)中提取“仅”文本信息。然而,我使用的解析器似乎不能很好地处理“txt”格式的文件,包括大量无意义的符号和标签以及一些根本不需要的 xbrl 信息。但是,当我将解析器直接应用于“htm”格式文件时(这些文件或多或少没有无意义标签的问题),解析器似乎工作得相对良好。

"""for Python 3, from urllib.request import urlopen"""
from urllib2 import urlopen
from bs4 import BeautifulSoup

"""for extracting text data only from txt format"""
txt = urlopen("https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/0001660156-16-000019.txt")
bs_txt = BeautifulSoup(txt.read())
bs_txt_text = bs_txt.get_text()
len(bs_txt_text) # 400051

"""for extracting text data only from htm format"""
html = urlopen("https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/f201510kzec2_10k.htm")
bs_html = BeautifulSoup(html.read())
bs_html_text = bs_html.get_text()
len(bs_html_text) # 98042

但问题是我只能依赖“txt”格式的文件,而不是“htm”格式的文件,所以我的问题是,有什么方法可以处理从文件中删除所有无意义的符号和标签吗?文件并仅提取文本信息,就像直接从“htm”文件中提取的信息一样?我对使用 Python 进行解析还比较陌生,所以如果你对此有任何想法,那将会有很大的帮助。预先感谢您!

最佳答案

处理 XBRL 数据的最佳方法是使用 XBRL 处理器,例如开源 Arelle (注意:我与他们没有任何关系)或其他专有引擎。

然后您可以以更高的抽象级别查看数据。就 XBRL 数据模型而言,您在问题中描述的过程涉及

  1. 在分类中查找文本 block (textBlockItemType) 的概念;
  2. 检索实例中针对这些概念所报告的事实的值(value);
  3. 此外,获取一些相关元信息:谁(报告实体)、时间(XBRL 周期)、文本内容(概念元数据和文档)等。

XBRL 处理器将为您节省解析整个 DTS 以及处理低级语法复杂性的精力。

第二种最合适的方法是使用 XML 解析器,可能使用 XML Schema 引擎以及 XQuery 或 XSLT,但这需要更多的工作,因为您需要:

  • 查看 XML 架构(XBRL 分类架构)文件,递归地导航它们并查找文本 block 概念,处理命名空间、链接等(XBRL 处理器会阻止您处理这些内容)
  • 或者只查看实例,最好是 XML 文件(例如 https://www.sec.gov/Archives/edgar/data/1660156/000166015616000019/zeci-20151231.xml ),并进行一些修改(例如获取以 TextBlock 结尾的 XML 元素),但这是您自己承担风险,不建议这样做,因为这会绕过分类法。

最后,正如您在原始问题中所建议的那样,您还可以查看文档格式文件(HTML 等),而不是查看 SEC 备案的数据文件,但是在这种情况下,它违背了使用 XBRL 的目的,这是通过标签和上下文使数据可以被计算机理解,并且它可能会错过与文本相关的重要上下文信息 - 有点像使用文本/十六进制编辑器打开电子表格文件。

当然,有些用例可以证明使用最后一种方法是合理的,例如运行自然语言处理算法。我想说的是,这超出了 XBRL 的范围。

关于python - 如何从html文件中删除所有不必要的标签和符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858278/

相关文章:

python - 如何在不发出示例请求的情况下检查 requests.Session 是否已通过身份验证?

Python HMAC : TypeError: character mapping must return integer, 无或 unicode

python - 用 Python 替换文件中的文本

javascript - Bootstrap - 随着屏幕缩小而缩小图像大小

html - 将类型 ="password"更改为类型 ="text"的安全问题

java - 使用 Jsoup 的特定标记后的 HTML 内容

java - 没有很多类的 GSON 解析

Python PIL 找不到我的 "libjpeg"

html - 我怎样才能让这个汉堡包图片下方的文字从页面左侧开始流动?

parsing - 如果 attoparsec 回溯,为什么它需要 manyTill?