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

Posted

技术标签:

【中文标题】使用 Google Refine/OpenRefine & Jsoup/BeautifulSoup 解析和删除 HTML 标签【英文标题】:Parse and remove HTML tags using Google Refine/OpenRefine & Jsoup/BeautifulSoup 【发布时间】:2015-02-09 03:19:39 【问题描述】:

我使用 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>

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

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

有人可以帮助我了解语法/为我编写一个函数来完成这项任务(最好是对语法的解释)?

【问题讨论】:

您能否提供您尝试解析的 HTML 代码的真实 sn-p 或页面链接。这将有助于制作 JSON 代码。 <ul> <li>Excellent quality, reliable socket.</li> <li>UL listed component.</li> <li>Rotate lamp 90° to lock in place.</li> <li>Purchase components a la carte.</li> <li>Two covers required for set.</li> </ul> <img alt=" style="width: 62px;" src="http://sunlightsupply.s3.amazonaws.com/images/icon/product/logo_culus.gif" /><br /> 还有<a href="http://www.youtube.com/watch?v=-AQFT4QWBEo" rel="prettyPhoto" shape="rect"><img alt=" src="http://sunlightsupply.s3.amazonaws.com/images/icon/product/WatchVideo.gif" complete="complete" /></a> <br /> <p style="text-align: center;"><strong>DESIGNED FOR HEATING/COOLING WITH OUTSIDE TEMPERATURES RANGING FROM 5<sup>°</sup> TO 105<sup>°</sup> F.<br /> </strong><strong>USE OF UNIT OUTSIDE OF THESE TEMPERATURE RANGES IS NOT RECOMMENDED.<br /> IMPROPER USAGE RELATING TO OUTSIDE TEMPERATURE IS NOT COVERED UNDER WARRANTY.</strong></p> <ul> 此描述还包括一个我以前从未见过的<sup> 标签,它也需要删除。如有必要,我可以链接到整个产品 .csv。感谢您的帮助 <sup> 标签是有效的 html 标签。它用于上标文本(以较小的字母出现在行首的文本)。 【参考方案1】:

移除标签

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

提取图像

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

<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 链接

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

您可以将它们存储在一个新列中,并使用带有value.contains('youtube.com') 的自定义构面删除所有不包含 youtube.com 的链接

【讨论】:

使用 value.replace('" 呢?或者在某些情况下只是 ">"。更不用说 'src="..."' 属性名称和值对了。 parseHtml() 最初会处理这个问题。如果您有兴趣深入了解此主题,我还将我最初的 *** 答案转换为博客文章:googlerefine.blogspot.com/2015/02/… 但是你说“没有必要使用parseHtml()”。 value.replace(' 和 很好,因为指定了完整的标签,但没有指定“【参考方案2】:

随便用

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

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

中的所有内容

【讨论】:

当您回答一个已有 7 年历史且已经有公认答案的问题时,一些额外的评论可能有助于解释您的答案。 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?

以上是关于使用 Google Refine/OpenRefine & Jsoup/BeautifulSoup 解析和删除 HTML 标签的主要内容,如果未能解决你的问题,请参考以下文章

在google drive使用google.colab云服务

Google Cloud 的使用

使用 Google 脚本创建和/或更新邮件合并 Google 文档

google play商店怎么使用

Google搜索技巧使用Google的其它专业搜索

如何使用 Google 服务帐户通过 Activity API 检索 Google Drive 活动?