Нужно извлечь номер из HTML

Учитывая это:

<p>Currencies fluctuate every day. The rate shown is effective for transactions submitted to Visa on <strong>February 5, 2017</strong>, with a bank foreign transaction fee of <st <span><strong>1</strong> Euro = <strong>1.079992</strong> United States Dolla <p>The 'currency calculator' below gives you an indication of the cost of purchas <p>February 5, 2017</p><div class="clear-both"></div> <!-- removed clearboth- <p><strong>1 EUR = 1.079992 USD</strong></p> <div class="clear-both"></di <table width="290" border="0" cellspacing="0" cellpadding="3"> <a href="/content/VISA/US/en_us/home/support/consumer/travel-support/exchange e-calculator.html"> <button class="btn btn-default btn-xs"><span class="retur <p><p>This converter uses a single rate per day with respect to any two currencies. Rates displayed may not precisely reflect actual rate applied to transaction amount due to rounding differences, Rates apply to the date the transaction was processed by Visa; this may differ from the actual date of the transaction. Banks may or may not assess foreign transaction fees on cross-border transactions. Fees are applied at banks' discretion. Please contact your bank for more information.</p>

Мне нужно извлечь 1.079992

Я использую:

 sed -E 's:.*(1\.[0-9\.]+).*:\1:g 

… который работает … но есть ли более элегантный способ?

Альтернативно, есть ли способ получить это значение прямо от curl ?

(Моя полная команда: curl 'https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html/?fromCurr=USD&toCurr=EUR&fee=0&exchangedate=02/05/2017' | grep '<p><strong>1' | sed -E 's:.*(1\.[0-9\\.]+).*:\1:g' )

4 Solutions collect form web for “Нужно извлечь номер из HTML”

Выполните вывод curl на следующую команду grep :

 grep --color -Po '(?<=<strong>1 EUR = )\d+\.\d+(?= USD</strong>)' 

Другое решение: html2text

 curl -s 'https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html/?fromCurr=USD&toCurr=EUR&fee=0&exchangedate=2/12/2017' \ | html2text \ | grep '1 Euro' \ | awk '{ print $4 }' 

Sugestion: используйте инструменты xml / html:

xmllint

 curl "$url" | xmllint -html -xpath '//span/strong[2]/text()' - 

xidel

 curl "$url" | xidel -s -e "//span/strong[2]" - 

или даже

 xidel -e "/span/strong[2]" $url 

Не разбирайте XML / HTML с sed , grep и т. Д. HTML не имеет контекста, но sed и друзья только регулярны. *

 url='https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html/?fromCurr=USD&toCurr=EUR&fee=0&exchangedate=02/05/2017' curl "${url}" \ | lynx -stdin -dump \ | awk '/1 EUR/{ print $4 }' 

Для этого вам понадобится lynx (текстовый веб-браузер **). Здесь curl извлекает страницу, затем lynx анализирует ее и выгружает текстовое представление . /1 EUR/' causes awk to search for the string 1 EUR`, находя только линию:

  1 EUR = 1.079992 USD 

Затем { print $4 } выводит четвертый столбец, 1.079992 .


* pcre ( grep -P в некоторых реализациях) может описывать некоторые контекстно-зависимые или даже контекстно-зависимые stringsets, но не все из них

** Вам тогда действительно не нужно curl , так как вы можете дать lynx URL вместо -stdin

  • Как разобрать этот вывод и поместить его в массив?
  • Как я могу использовать (sed | awk) для маскирования адреса электронной почты со звездочками типа <j ****** e @ g ***. Com>
  • конец строки в linux и mac
  • Извлечь точное количество элементов из одного и того же идентификатора
  • Создание файлов из шаблонов, замещение в середине других слов
  • Замена текста между двумя комментариями HTML
  • Как проверить, отсутствует ли какой-либо повторяющийся текст в текстовом файле?
  • Как пропустить файл в sed, если он содержит регулярное выражение?
  • Печать 2-й и 7-й строк в файл с помощью `sed`
  • Редактировать файл на основе существования строки
  • Получение ошибки RE: операнд-оператор повторения недействителен в osx sed
  • Interesting Posts

    Перенаправление не переписывание файла, а просто создание пустой

    Команда запуска и остановки команды в терминале на клавиатуре (горячая клавиша) сокращает нажатие клавиши?

    Как установить драйверы для интегрированной графики Intel?

    Связанный с Планированием

    Перемещение пространства + ijkl в клавиши со стрелками

    Каков эквивалент apt-ключа в способности?

    Что произойдет, если я отформатирую установленный USB-накопитель с флагом -force?

    Могу ли я закрепить всю папку с помощью gzip?

    Как заставить bash считать слово `-mthreads` как` -pthread`?

    Как повлиять на выбор компилятора системами сборки, такими как CMake

    Time Machine с графическим интерфейсом для Linux Mint для новичков

    Cryptsetup, зависающий после ввода кодовой фразы

    ssh от linux до mac – разрешено отклонение

    Как установить клиент OpenVPN на RHEL 7.3?

    Как grep для 2 строк (условие AND) внутри блока, которые не находятся в одной строке, а затем найти что-то еще в этом же блоке

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