使用 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 标签,<...>
中的所有内容
我使用 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')
只需使用
value.replace(/<[^>]*>/,"")
这将删除所有 HTML 标签,<...>
中的所有内容