繁体   English   中英

使用powershell预处理html数据

[英]preprocessing html data with powershell

我有一些客户数据的 html 源代码,需要在使用连接字符串拆分的行部署之前从 html 标签中清除。

我希望能够针对特定类型的信息。 例如,如果客户在他的页面上有一个类别列表。 每个“类别”都位于一个易于区分的标签内:

<span _ngcontent-jal-c67="" class="category-name">Cryptocurrency</span>

是否可以删除未嵌套在类似 html 标签中的所有其他内容?

比方说,例如,我想要在<span *>*</span>内发生的所有事情。 这样每个非<span></span>标签及其内容都将被删除。 所有<span ***>***</span>将保留,没有标签。 这是我可以在powershell中做的事情吗? 让我们避免 paste.exe 和 cygwin 类型的东西。 我正在寻找标准的本机 Windows 方法(cmd 或 powershell)。

再次,我想删除所有标签。

只是我没有删除的内容应该仅限于在特定标签中找到的内容。 例如, <span _ngcontent-jal-c68="" class="category-name">Shopping</span>适合<span *>*</span>个人资料的一切

只留下内容。 没有标签。

来自: <span _ngcontent-jal-c32="" class="category-name">Home and Graden</span>

至: Home and Graden

我真的在寻找如何在 powershell 中执行此操作而无需安装任何内容或对操作系统(windows10)进行任何有趣更改的答案

在询问 Stackoverflow 之前,请尝试调查问题。 您是否知道 PowerShell 中有一个-replace运算符可以让您使用 RegEx? 您是否确定 RegEx 可以帮助您解决问题?

无论如何,这是您可以采用的一种方法。

$html = '<span _ngcontent-jal-c32="" class="category-name">Home and Graden</span>'
if ($html -match '(<span.*>)(?<Category>.+)(</span>)') { 
    $Matches.Category 
}

Home and Graden

-match运算符可以测试 RegEx。 RegEx (<span.*>)(?<Category>.+)(</span>)将创建三个组,其中一个名为Category 类别位于跨度标签之间。 对于您的输入,您必须确保任何类别都位于 span-tag 内。 如果-match返回 true,则填充自动变量$Matches 由于我们将第二组命名为Category ,因此我们可以使用$Matches.Category轻松访问它作为属性。

或者,对于更复杂的 html 文件,甚至更可取的是,您可以使用 PowerShell 解析 html,请参阅Powershell 提示:从本地文件或字符串解析 HTML

您可能只使用[System.Net.WebUtility]::HtmlDecode方法,而不是使用精致的正则表达式

$Html = '<span _ngcontent-jal-c67="" class="category-name">Cryptocurrency</span>'
([Xml][System.Net.WebUtility]::HtmlDecode($Html)).GetElementsByTagName('span').'#text'

结果:

Cryptocurrency

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM