Удаление html-тегов в sed или аналогичных

#html #sed #tags

#HTML #sed #Теги

Вопрос:

Я пытаюсь извлечь содержимое таблицы из веб-страницы. Мне просто нужно содержимое, но не теги <tr></tr> . Мне даже не нужно «tr» или «td» только для содержимого. например,:

 <td> I want only this </td>
<tr> and also this </tr>
<TABLE> only texts/numbers in between tags and not the tags. </TABLE>
  

также я хотел бы поместить вывод первого столбца, подобный этому, в новый csv-файл
column1, info1, info2, info3
coumn2, info1, info2, info3

Я пробовал использовать sed для удаления шаблонов <tr> <td> , но когда я извлекаю таблицу, появляются и другие теги, такие как <color> <span> etc. итак, я хочу удалить все теги; короче говоря, все с < и> .

Комментарии:

1. Насколько регулярным является содержимое? Возможно, вы сможете использовать lynx для захвата страницы и преобразования ее в текст, а затем для анализа обычного текста. Трудно сказать, не вдаваясь в подробности, очистка экрана, как правило, является выбором между различными уродливыми взломами.

2. хорошо, это решило первую проблему ввода sed -e ‘s/<.*>//g’ . и к комментарию выше я обработал страницы и очистил только часть таблицы. таким образом, файл содержит только теги чистой таблицы и данные. что-то вроде процедуры расписания экзаменов.

Ответ №1:

sed 's/<[^>] >//g' удалит все теги, но вы можете заменить их пробелом, чтобы теги, расположенные рядом друг с другом, не выполнялись вместе: <td>one</td><td>two</td> becoming: onetwo . Таким образом, вы могли бы сделать sed 's/<[^>] >/ /g' так, чтобы он выводил one two (ну, на самом деле one two ).

Тем не менее, если вам не нужен только необработанный текст, и это звучит так, как будто вы пытаетесь выполнить некоторые преобразования данных после удаления тегов, язык сценариев, такой как Perl, может быть более подходящим инструментом для этого.

Поскольку mu слишком короткий, упомянутая очистка HTML может быть немного рискованной, использование чего-то, что фактически анализирует HTML для вас, было бы лучшим способом сделать это. PHPs DOM API довольно хорош для таких вещей.

Ответ №2:

Оригинал:

Регулярное ВЫРАЖЕНИЕ терминала Mac ведет себя немного по-другому. Я смог сделать это на своем Mac, используя следующий пример:

 $ curl google.com | sed 's/<[^>]*>//g'
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   219  100   219    0     0    385      0 --:--:-- --:--:-- --:--:--   385

301 Moved
301 Moved
The document has moved
here.

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
  

Редактировать:

Просто для пояснения исходный текст выглядел так:

 $ curl googl.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
  

Также от раздражающего заголовка curl можно избавиться, используя опцию -s:

 $ curl -s google.com | sed 's/<[^>]*>//g' 

301 Moved
301 Moved
The document has moved
here.

$