使用 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云服务