【发布时间】:2017-04-21 10:52:10
【问题描述】:
我有外部 HTML 站点,我需要从该站点上的表中提取数据。但是HTML网站的源除了代码中的表格之外格式错误,所以我不能使用
xmllint --html --xpath <xpath> <file>
因为它不能正常工作,当网站上的 HTML 格式被破坏时。
我的想法是使用 curl 并删除表格上方和下方的代码。提取表格后,代码很干净,适合 xmllint 工具(我可以使用 xpath)。但是,删除匹配项之上的所有内容对 shell 来说具有挑战性,如您在此处看到的:Sed doesn't backtrack: once it's processed a line, it's done. 有没有办法只从 bash 中的 HTML 站点中提取表格的代码?假设,代码具有这种结构。
<html>
<head>
</head>
<body>
<p>Lorem ipsum ....</p>
<table class="my-table">
<tr>
<th>Company</th>
<th>Contact</th>
</tr>
</table>
<p>... dolor.</p>
</body>
</html>
我需要这样的输出来正确解析数据:
<table class="my-table">
<tr>
<th>Company</th>
<th>Contact</th>
</tr>
</table>
请不要因为尝试使用 bash 而给我减号。
【问题讨论】:
-
你试过用 HTML-Tidy 清理 HTML html-tidy.org
-
我尝试了“tidy -ashtml page.html -output page2.html”,但不幸的是它返回“此文档有错误,必须在使用 HTML Tidy 生成整理后的版本之前修复。”它需要是全自动的。不管怎样,谢谢。 @Dan-Dev
-
@Dan-Dev 非常感谢,毕竟 tidy 帮了大忙。我使用了 force-output,然后 xmllint 可以读取 html 文件。
标签: bash sed html-parsing