Извлечение нескольких строк из файла HTML с использованием определенных тегов

Мне нужно извлечь строку, которая начинается с тега <span class="style530"> и заканчивается </span> .

Я использовал команду sed, но не получил желаемого результата. Ниже приведен пример кода:

 <strong> - <span class="style530"> AA - This is my First Heading</span></strong><br> <span class="style530"> <strong> *Some text,* <strong> *text*</strong>, *text* <strong> *text*</strong>: <br> <span class="style530"> <strong> - This is my Second Heading</strong></span><br> <span class="style530"> <strong> *Some text,* <strong> *text*</strong>, *Here is some text.* <strong>*text*</strong>: *Here is some text*.<br> <br> <strong> - <span class="style530"> - This is my Third Heading</span></strong><br> 

Результат должен выглядеть следующим образом:

  AA - This is my First Heading - This is my Second Heading - This is my Third Heading 

Благодаря!

3 Solutions collect form web for “Извлечение нескольких строк из файла HTML с использованием определенных тегов”

Regex на самом деле не способен полностью анализировать html.

Существует инструмент командной строки, называемый xidel, который позволяет использовать селекторы XPath или CSS, чтобы вытащить нужные вам биты.

Что-то вроде этого соответствовало бы вашему заявленному требованию:

 ./xidel test.html --extract '//span[@class="style530"]' --output-format bash 

Но обратите внимание, что это возвращает больше, чем ваш требуемый вывод, поскольку у вас есть один незакрытый <span class="style530">

Используйте HTMLParser для таких действий:

 #!/usr/bin/python # vim: set fileencoding=utf8 : # (c) fazie from HTMLParser import HTMLParser import re import sys class MyParser(HTMLParser): inside_span = False def __init__(self,file): HTMLParser.__init__(self) f = open(file) self.feed(f.read()) def handle_starttag(self,tag,attrs): if tag == 'span': for name,value in attrs: if name=='class' and value=='style530': self.inside_span=True def handle_data(self,data): data = data.strip(' \t\r\n') if data != "": if self.inside_span: data = re.sub('\n',' ',data) data = re.sub('\s\s+',' ',data) print data def handle_endtag(self,tag): if tag == 'span': self.inside_span=False MyParser(sys.argv[1]) 

Запустить его:

 python myparser.py inputfile.html 

Вы можете попробовать что-то вроде ниже.

 awk -vRS='<' ' inside || /^span[^>]*class="style530"/ { inside = 1 if (/^span/) n++ else if (/^\/span>/ && !--n) { $0="/span>\n" inside=0 } printf "<%s", $0 }' file.html | sed '/^</ d' | grep -v ">$" 

Тем не менее, нецелесообразно извлекать с использованием заголовков HTML. Пожалуйста, смотрите здесь, почему вы не должны анализировать HTML-страницы. Я бы предложил вам использовать curl и w3m для удаления заголовков HTML, после чего синтаксический анализ станет немного проще.

  • Извлечение значений из простого файла html через grep / awk
  • Программа Unix для генератора случайных изображений
  • Создать в HTML из вывода скрипта bash
  • Как я могу автоматически создать документ, который позволяет мне сравнивать список из 4 .png файлов бок о бок?
  • Преобразование таблицы csv в HTML
  • Как экспортировать ссылки Google Alerts?
  • GUI-библиотека или диспетчер окон с использованием HTML
  • Скрипт для удаления определенных элементов span из файла HTML
  • Сценарий Bash для редактирования большого количества html-документов
  • Извлечение значений из HTML через парсер HTML
  • Сценарий Bash для извлечения некоторой информации из HTML-страниц Ebay
  • Interesting Posts

    добавление текста в имя файла перед расширением

    Несколько логических операторов, ((A || B) && C) и «синтаксическая ошибка вблизи неожиданного токена»

    Syslinux, что делает?

    Как спасти полноэкранный гейк из Seahorse Modal Dialog

    вставить новую строку, когда отрицательный + положительный шаблон найден с помощью sed

    Как я могу спамить проверку файлов электронной почты на 12 лет?

    Добавление нового каталога в PATH и символическую ссылку для каталога уже в PATH

    Fedora 17 не загружается

    Установка с установленного iso, расположенного на USB-HDD

    Я нажимаю Ctrl + d во время сеанса экрана, как мне теперь отправлять команды?

    ext4, почему 70k-файл занимает 88 блоков

    Дженкинс пишет разрешение на Linux

    Правило IPTables DNAT для локального веб-сервера не работает с localhost?

    Как установить последнюю версию nodexs версии 6.x или 7.x (апрель 2017 г.) в системе sid / stretch?

    Как изменить текущую позицию копии или пропустить область в ddrescue

    Linux и Unix - лучшая ОС в мире.