我想从 1000 多个不同格式的 html 文件中提取文本

我有 1000 个 html 文件,我想从这些文件中提取“项目 1A。风险因素”部分。这些文件都没有任何 id 或任何东西,而且大多数文件都有不同的格式,例如,其中一些在“div”标签中包含文本,其他文件在“p”、“table”等中。


给定特定格式,我可以提取一段文本。例如,这里;我能够从 ITEM 1A 部分中提取文本。使用这段代码的风险因素。


should_print = False


for item in soup.find_all("div"):

    if (item.name == "div" and item.parent.name != "div"):

        if "ITEM" in item.text and "1A" in item.text and "RISK" in item.text and "FACTORS" in item.text:

            should_print = True

        elif "ITEM" in item.text and "1B" in item.text:

            break

        if should_print:

            with open(r"RF.html", "a") as f:

                f.write(str(item))

我可以编写一个代码来满足所有格式,但我将如何确定在哪个文件上运行什么代码?假设,如果我在包含“p”标签中的文本的文件上运行这个^代码,它会给我垃圾文本。


这里和这里是 html 文件的更多示例。


鸿蒙传说
浏览 158回答 2
2回答

繁华开满天机

一个不错的选择是使用XPath查找部分标题,这可以提供通用解决方案。下面,一个xmllint在 bash 中使用但xml.etree.ElementTree在 python 中使用的示例应该可以完成工作xmllint -html -recover -xpath '//div[descendant-or-self::*[.="ITEM 1A. RISK FACTORS."]]/descendant-or-self::text()' 2>/dev/null 10k.htmXpath 解释://div[descendant-or-self::...获取具有表达式定义的子元素的 div(如下所述)。descendant-or-self::*[.="ITEM 1A. RISK FACTORS."]找到包含预期标题的任何节点。descendant-or-self::text()获取所有包含元素的文本。Xpath 使用来检测标题contains(...)'//div[descendant-or-self::text()[contains(.,"ITEM 1A. RISK FACTORS")]]/descendant-or-self::text()'

皈依舞

您只需要更改您的 if 条件,因为您所做的只是 false 到 true 但循环中的项目仍然是指soup.find_all("div")如果条件更改为:  if "ITEM" in item.text and "1A" in item.text and "RISK" in item.text and "FACTORS" in item.text:         print (item.find('b').text)输出 :ITEM 1A. RISK FACTORS.在 if 语句中:print (item.text) 将显示所有文本print (item) 将显示所有具有字符串 ITEM , 1A,RISK 的源
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python