python - 从 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>
(另一种观点):
- 前提条件
- PC1
- PC2
- 用例触发器
- T1
- T2
- 后置条件
- PO1
- PO2
我正在尝试用 Python 编写一个函数来分析这个列表并提取数据组。目标是将这些数据放入如下所示的矩阵中:
[[Preconditions, PC1],[Preconditions, PC2],[Use Case Triggers, T1],[Use Case Triggers, T2],[Postconditions, PO1],[Postconditions,PO2]]
另一个需要跨越的障碍是,无论 ul 和 li 元素的数量如何,我都需要生成这种矩阵。
任何指导表示赞赏!
解决方案
您可以编写一个函数,该函数采用原始 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()
推荐阅读
- jmeter - 在执行基于云的远程主机期间,是否有任何 jmeter 插件可用于显示统计信息?
- vim - 使用 Vim 扩展时如何在 Esc 上的 VSCode 中自动保存文件?
- git - 如何调用 git show head:
在jgit? - java - 我如何正确调用我创建的方法以便我能够在另一个中使用它?
- javascript - 增加一个值的问题 它可能是什么?
- bash - Bash 将字符附加到与另一个文件中的 IP 地址匹配的行的开头
- r - 在R中选择特定行周围的行
- r - 由线条函数生成的绘图线未显示在闪亮的绘图输出上
- reactjs - this.state.items.map 不是函数。解决方案可能是什么?
- awk - 如何仅在第一次出现匹配的行上进行替换?