Анализируйте и удаляйте HTML-теги с помощью Google Refine / OpenRefine & Jsoup / BeautifulSoup

Я использую Google Refine для работы с запутанными описаниями продуктов, чтобы отформатировать их для загрузки в магазины Magento с использованием профилей Magmi / Dataflow. Я все еще использую 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() Я могу анализировать нужные теги изображений, но не могу удалить / заменить эти теги с помощью функции replace() в GREL. Я попытался добавить выражение в первую строку функции замены, например: value.replace(/value.parseHtml().select("img").toString()/, "") и другие подобные функции, но безрезультатно.

Для моего текущего проекта мне нужно: 1) удалить все теги <img>, <div>, <p> and <span>, а также 2) проанализировать и выделить ссылки на видео YouTube в отдельный столбец.

Может ли кто-нибудь помочь мне с синтаксисом / приготовить мне функцию для выполнения этой задачи (желательно с объяснением синтаксиса)?


person theslumberking    schedule 09.02.2015    source источник
comment
Можете ли вы предоставить настоящий фрагмент HTML-кода, который вы пытаетесь проанализировать, или ссылку на страницу. Это поможет создать код JSON.   -  person magdmartin    schedule 09.02.2015
comment
А также <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>   -  person theslumberking    schedule 10.02.2015
comment
Это описание также включает тег <sup>, который я никогда раньше не видел, который также необходимо удалить. При необходимости я могу добавить ссылку на весь товар в формате .csv. Спасибо за помощь   -  person theslumberking    schedule 10.02.2015
comment
Теги <sup> являются действительными тегами HTML. Он используется для надстрочного текста (текста, который отображается в верхней части строки меньшими буквами).   -  person Axel    schedule 10.02.2015
comment
Кроме того, вы должны сосредоточиться на использовании оператора регулярного выражения, который удаляет все теги, EX все, что содержится в скобках <>, вместо того, чтобы пытаться удалить каждый из них по отдельности.   -  person Axel    schedule 10.02.2015
comment
Я имел в виду, что раньше не видел тегов ‹sup›, не то чтобы они недействительны. Это подводит меня к другому моменту - есть некоторые теги, которые я ХОЧУ в данных, в частности форматирование списка и несколько других основ, которые сделали удаление всего HTML невозможным.   -  person theslumberking    schedule 11.02.2015


Ответы (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] извлечет все ссылки.

Вы можете сохранить их в новом столбце и удалить все ссылки, не содержащие youtube.com, с помощью настраиваемого фасета с value.contains('youtube.com')

person magdmartin    schedule 11.02.2015
comment
Использование value.replace ('‹img', '') не заменит весь тег. А что насчет '/ ›в конце? А в некоторых случаях просто ›. Не говоря уже о паре имени и значения атрибута 'src = ...'. - person ultrageek; 06.05.2015
comment
parseHtml() позаботятся об этом изначально. Я также превращаю свой первоначальный ответ stackoverflow в сообщение в блоге, если вам интересно узнать больше по этой теме: googlerefine.blogspot.com/2015/02/ - person magdmartin; 06.05.2015
comment
Но вы говорите, что использовать parseHtml () нет необходимости. Value.replace ('‹img', '') не заменяет полную разметку тега. Это нормально для ‹div› и ‹/div›, поскольку указаны полные теги, но не ‹img. Если я чего-то не упускаю. - person ultrageek; 10.05.2015