首页 > 解决方案 > 从 Python 中的 HTML 项目符号列表中提取数据

问题描述

我有一个带有以下项目符号列表的 html 文档:

Body=<ul><li>Preconditions<ul><li>PC1</li><li>PC2</li></ul></li><li>Use Case Triggers<ul><li>T1</li><li>T2</li></ul></li><li>Postconditions<ul><li>PO1</li><li>PO2</li></ul></li></ul>

(另一种观点):

我正在尝试用 Python 编写一个函数来分析这个列表并提取数据组。目标是将这些数据放入如下所示的矩阵中:

[[Preconditions, PC1],[Preconditions, PC2],[Use Case Triggers, T1],[Use Case Triggers, T2],[Postconditions, PO1],[Postconditions,PO2]]

另一个需要跨越的障碍是,无论 ul 和 li 元素的数量如何,我都需要生成这种矩阵。

任何指导表示赞赏!

标签: pythonhtml

解决方案


您可以编写一个函数,该函数采用原始 html 并删除所有 html 标记

def cleanhtml(raw_html):
    cleanr = re.compile("<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});")
    cleantext = re.sub(cleanr, " ", raw_html)
    return cleantext

其他一些更清洁的选择:

  • cleanr = re.compile("<[A-Za-z\/][^>]*>")
  • cleanr = re.compile("<[^>]*>")
  • cleanr = re.compile("<\/?\w+\s*[^>]*?\/?>")

但是,Beautifulsoup 有一个更好、更简单的方法。

from bs4 import BeautifulSoup
def clean_with_soup(url: str) -> str:
    r = requests.get(url).text
    soup = BeautifulSoup(r, "html.parser")
    return soup.get_text()

推荐阅读