使用 Google Refine/OpenRefine & Jsoup/BeautifulSoup 解析并删除 HTML 标签

Parse and remove HTML tags using Google Refine/OpenRefine & Jsoup/BeautifulSoup

我使用 Google Refine 来处理杂乱的产品数据表,以便使用 Magmi/Dataflow 配置文件对其进行格式化以上传到 Magento 商店。我仍在使用 Google Refine 2.5,因为它是最新的稳定版本。

供应商数据表中的描述通常充满二进制字符和混乱 HTML,我需要大量操作和重新格式化。

我知道我可以使用 GREL/Python/Jsoup 的某种组合来完成我的任务,但是我在使用不同语言的语法时遇到了问题。

我的数据如下所示:

Some product data here. <ul><li>Bullet one <li> Bullet two</ul> <br /> Some other product data here. <span id="product-image><img src="image.png"></span>

使用以下代码段:value.parseHtml().select("img").toString() 我能够解析我想要的图像标签,但我无法使用 GREL 中的 replace() 函数 remove/replace 这些标签。我试图将表达式添加到替换函数的第一个字符串中,如:value.replace(/value.parseHtml().select("img").toString()/, "") 和其他类似函数无济于事。

对于我当前的项目,我需要:1) 删除所有 <img>, <div>, <p> and <span> 标签,加上 2) 解析 YouTube 视频链接并将其分离到一个单独的列中。

谁能帮我解决语法问题/帮我设计一个函数来完成这个任务(最好能解释一下语法)?

删除标签

如果您只想替换标签,则无需使用parsHtml()。只需执行 value.replace('<img','') 即可删除所有与图像相关的标签。 value.replace('<div>','').replace('</div>','') 所有 <div>

提取图像

value.parseHtml().select("img").toString() select 标签 及其内容 。使用您的示例,它将 returns:

<img alt=" style=" width:="" 62px="" src="http://sunlightsupply.s3.amazonaws.com/images/icon/product/logo_culus.gif" />

<img alt=" src=" http:="" sunlightsupply="" s3="" amazonaws="" com="" images="" icon="" product="" watchvideo="" gif="" complete="complete" />

提取 YouTube Link

下面的 GREL value.split('href=')[1].split('"')[0] 将提取所有链接。

您可以将它们存储在一个新列中,并使用带有 value.contains('youtube.com')

的自定义构面删除所有不包含 youtube.com 的链接

只需使用

value.replace(/<[^>]*>/,"")

这将删除所有 HTML 标签,<...>

中的所有内容