Что нового

[Сеть, интернет] получить цифры из HTML между тегов?

D

dreamorder

Гость
Доброго времени суток гос-да.

Ни как не могу решить задачку, надо получить цифры из кода HTML, где цифры составляют десятичные числа между тегами, вернее получить то я могу,
но получая массив и определяя что мне в нём надо, через некоторое время становится не актуальным, ибо получаемый массив чисел всё время меняется. Но можно
решить эту задачку получая те самые числа между или после определённых тегов HTML.

пример HTML:
<div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">350.03 RUB</div>

пример моего кусочка скрипта:
Код:
$x1rub = StringRegExp($pDatarub, '\<[rub]{3}?\>(\d+\.\d+)?\[R]', 3) ; ищем символы в HTML
   If IsArray($x1rub) Then  ; если нашли то >>
    _ArrayDisplay($x1rub)


Очень прошу, помогите мне с этой проблемкой :smile:

P.S. вот так получаю массив без проблем:
Код:
$x1rub = StringRegExp($pDatarub, '(\d+\.\d+)', 3) ; ищем символы в HTML
   If IsArray($x1rub) Then  ; если нашли то >>
    _ArrayDisplay($x1rub)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
dreamorder,
А если примерно так попробовать?
Код:
Global $iPrice

HotKeySet('{Esc}', '_Exit')
_GetPrice()
AdlibRegister('_GetPrice', 2000)

While 1
	Sleep(100)
WEnd

Func _GetPrice()
	Local $s_HTML = '<div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">' & _
			Random(100, 500, 1) & '.' & StringFormat('%02d', Random(0, 99, 1)) & ' RUB</div>'
	;получайте здесь Ваш HTML код
	ConsoleWrite($s_HTML & @LF)

	$iPrice = Number(StringRegExpReplace($s_HTML, '(?is).*rub.*?(\d+\.\d+)\s?rub.*', '$1'))
	ToolTip($iPrice, 0, 0)
	;Return $iPrice
EndFunc   ;==>_GetPrice

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
D

dreamorder

Гость
madmasles Большое спасибо за пример, но что то не получается с заменой символов мб, в общем выдаёт числа, которых даже нет в коде HTML :stars:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
dreamorder [?]
но что то не получается с заменой символов мб, в общем выдаёт числа, которых даже нет в коде HTML
1. Как Вы получаете код страницы?
2. Покажите код страницы полностью.
3. Ваш код покажите.
 
Автор
D

dreamorder

Гость
вот один модуль кода

Код:
While 1
        rub() 
WEnd

Func rub()
	$oRequestrub = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаем обьект WinHttp. 
                            If @error Then
                            MsgBox(8192+16, ' Внутреняя Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
                            Exit 1
						EndIf
    $oRequestrub.Open('GET', 'https://...', 0)
    $oRequestrub.setTimeouts(5000, 5000, 15000, 15000)
    $oRequestrub.SetRequestHeader('Accept', '*/*')
    $oRequestrub.SetRequestHeader("User-Agent", " Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24")
    $oRequestrub.Send('') ;  отправляем
    $oRequestrub.WaitForResponse
    $pDatarub = $oRequestrub.ResponseText ; получаем текст стр в  $pDatrub
	$x1rub = StringRegExp($pDatarub, '(\d+\.\d+)', 3) ; ищем символы в HTML
   If IsArray($x1rub) Then  ; если нашли то >>
    _ArrayDisplay($x1rub)
  ;GUICtrlSetData($label1,$x1rub) ; изменяем в label текст на найденый текст
EndIf

EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
пример HTML:
<div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">350.03 RUB</div>

А это разве не innertext ? ? ? ? ? ? :shok:

[box title=dorder.html]<div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">350.03 RUB</div>[/box]

Код:
#include <IE.au3>

$oIE = _IECreate('C:\...\dorder.html')

$oTags = _IETagNameGetCollection ($oIE, "div")
For $Tag In $oTags
	MsgBox(0, 'Element Info', 'Innertext: ' & $Tag.innertext)
Next
 
Автор
D

dreamorder

Гость
C2H5OH Спасибо за отклик на призыв о помощи. Но так как я даже и половины Autoit ещё не освоил (хотя пишу простые но достаточно хорошие боты) про ваш пример кода не всё понимаю. Не могли бы Вы соединить свой пример с моим модулем, с описанием строк скрипта, с учётом того что на странице сайта несколько десятков таких строк HTML, отличие
в которых только лишь в трёх буквах, типа RUB, USD, EUR, и т.д., каждый модуль скрипта должен "выдёргивать" только десятичные числа.
Заранее большое спасибо! :smile:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
dreamorder,
покажите больше кода страницы.
 
Автор
D

dreamorder

Гость
Вот пример, тут только на поиск и вывод всего трёх чисел, но в финале будет около 12 выводов десятизначных чисел в окно ...

Button2 и Button4 не задействованы (не стал удалять) :smile:

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <Array.au3>

AutoItSetOption('TrayIconHide', 1)

;Run('C:...')
;WinWaitActive('Prog', "")
;WinSetTitle('Prog', '', 'Proga')


;#Region ### START Koda GUI section ### Form=C:\Users\...\...\...\Form1.kxf
$Form2 = GUICreate("Proga_", 499, 171, 195, 115)
$Button2 = GUICtrlCreateButton("Button2", 304, 8, 187, 33)
GUICtrlSetFont(-1, 14, 400, 0, "Book Antiqua")
$Button3 = GUICtrlCreateButton("Button3  =>", 8, 48, 163, 25)
GUICtrlSetFont(-1, 13, 400, 0, "Book Antiqua")
$Button4 = GUICtrlCreateButton("Button4        =>", 8, 80, 163, 25)
GUICtrlSetFont(-1, 13, 400, 0, "Book Antiqua")
$Button5 = GUICtrlCreateButton("Button5", 8, 136, 163, 25)
GUICtrlSetFont(-1, 12, 400, 0, "Book Antiqua")
$Radio1 = GUICtrlCreateRadio("USD", 24, 112, 57, 17)
GUICtrlSetFont(-1, 12, 400, 0, "Book Antiqua")
$Radio2 = GUICtrlCreateRadio("RUB", 96, 112, 57, 17)
GUICtrlSetFont(-1, 12, 400, 0, "Book Antiqua")
$Label1 = GUICtrlCreateLabel("00.00", 184, 48, 162, 22)
GUICtrlSetFont(-1, 17, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("00.00", 184, 80, 162, 22)
GUICtrlSetFont(-1, 17, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Button1", 8, 8, 283, 33)
GUICtrlSetFont(-1, 16, 400, 0, "Book Antiqua")
;$Pic1 = GUICtrlCreatePic("D:\_111.jpg", 352, 48, 140, 116)
GUISetState(@SW_SHOW)
;#EndRegion ### END Koda GUI section ###

Global $x1
Global $x1usd
Global $x1rub
Global $mony

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button5
			vyx()
		Case $Radio1
			usd()
		Case $Radio2
			rub()
		Case $Button1
			ControlFocus('Proga','','But')
			ControlClick('Proga','','But')
	   Case $Button3 ; если нажата кнопка то >>
            $oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаем обьект WinHttp.
                            If @error Then
                            MsgBox(8192+16, ' Внутреняя Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
                            Exit 1
                       EndIf
    $oRequest.Open('GET', 'https://...', 0)
    $oRequest.setTimeouts(5000, 5000, 15000, 15000)
    $oRequest.SetRequestHeader('Accept', '*/*')
    $oRequest.SetRequestHeader("User-Agent", " Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24")
    $oRequest.Send('') ;  отправляем
    $oRequest.WaitForResponse
    $pData = $oRequest.ResponseText ; получаем текст стр в  $pData
	$x1 = StringRegExp($pData, '(\d+\.\d+)', 3) ; ищем текст в HTML
   If IsArray($x1) Then  ; если нашли то >>
   ; _ArrayDisplay($x1)

    GUICtrlSetData($label1,$x1[0]) ; изменяем в label текст на найденый текст
EndIf
EndSwitch
WEnd

====================================================================================================================
While 1
        usd()
WEnd

Func usd()
	$oRequestusd = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаем обьект WinHttp.
                            If @error Then
                            MsgBox(8192+16, ' Внутреняя Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
                            Exit 1
						EndIf
    $oRequestusd.Open('GET', 'https://.../', 0)
    $oRequestusd.setTimeouts(5000, 5000, 15000, 15000)
    $oRequestusd.SetRequestHeader('Accept', '*/*')
    $oRequestusd.SetRequestHeader("User-Agent", " Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24")
    $oRequestusd.Send('') ;  отправляем
    $oRequestusd.WaitForResponse
    $pDatausd = $oRequestusd.ResponseText ; получаем текст стр в  $pDatausd
	$x1usd = StringRegExp($pDatausd, '(\d+\.\d+)', 3) ; ищем текст в HTML
   If IsArray($x1usd) Then  ; если нашли то >>
   ; _ArrayDisplay($x1usd)

    GUICtrlSetData($label1,$x1usd[2]) ; изменяем в label текст на найденый текст
EndIf

EndFunc

===================================================================================================================
While 1
        rub()
WEnd

Func rub()
	$oRequestrub = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаем обьект WinHttp.
                            If @error Then
                            MsgBox(8192+16, ' Внутреняя Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
                            Exit 1
						EndIf
    $oRequestrub.Open('GET', 'https://.../', 0)
    $oRequestrub.setTimeouts(5000, 5000, 15000, 15000)
    $oRequestrub.SetRequestHeader('Accept', '*/*')
    $oRequestrub.SetRequestHeader("User-Agent", " Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24")
    $oRequestrub.Send('') ;  отправляем
    $oRequestrub.WaitForResponse
    $pDatarub = $oRequestrub.ResponseText ; получаем текст стр в  $pDatrub
	$x1rub = StringRegExp($pDatarub, '(?is).*rub.*?(\d+\.\d+)\s?rub.*', 3) ; ищем символы в HTML
   If IsArray($x1rub) Then  ; если нашли то >>
   ; _ArrayDisplay($x1rub)

    GUICtrlSetData($label1,$x1rub[4]) ; изменяем в label текст на найденый текст
EndIf

EndFunc
-------------------------------------------------------------------------------------------------------------------
Func vyx()
	$PIDs = ProcessList('... .exe') ;Возвращает двумерный массив, содержащий список выполняемых процессов (имя и PID).
For $i = 1 To $PIDs[0][0] ;$PIDs[0][0] - это количество процессов
    If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1]) ;Если процесс существует, то закрываем его
Next
    ToolTip ( "   ... ", 500, 30, ' ... ', 7 )
    Sleep (9000)
    Exit
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не, я хочу посмотреть код страницы.
Больше html-кода, а не только строку с рублями.
 
Автор
D

dreamorder

Гость
строки кода с сайта


<span>
<ul>
<li>1000 = <div case="usd" style="display: inline" href="/currency/chart/usd" class="aisStaticWindow aisStaticWindowFixed">112.78 USD</div></li>
<li>1000 = <div case="eur" style="display: inline" href="/currency/chart/eur" class="aisStaticWindow aisStaticWindowFixed">100.00 EUR</div></li>
<li class="last">1000 = <div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">3060.11 RUB</div></li>
</ul>
</span>
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Как-то так...
Код:
$STR = '<li>1000 = <div case="usd" style="display: inline" href="/currency/chart/usd" class="aisStaticWindow aisStaticWindowFixed">112.78 USD</div></li>'
$STR = '<li>1000 = <div case="eur" style="display: inline" href="/currency/chart/eur" class="aisStaticWindow aisStaticWindowFixed">100.00 EUR</div></li>'
$STR = '<li class="last">1000 = <div case="rub" style="display: inline" href="/currency/chart/rub" class="aisStaticWindow aisStaticWindowFixed">3060.11 RUB</div></li>'
   $iPrice = StringRegExp($STR, '(?s).*?Fixed["'']*>(.*?)<', 3)
ConsoleWrite($iPrice[0]&@CRLF)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну, или так
Код:
#include <IE.au3>
#include <Array.au3>

Global $aRUB[1] = [0], $aUSD[1] = [0], $aEUR[1] = [0]

$oIE = _IECreate('https://...')

$oTags = _IETagNameGetCollection ($oIE, "div")
For $Tag In $oTags
	If $Tag.classname == "aisStaticWindow aisStaticWindowFixed" Then
		Switch $Tag.case
			Case "rub"
				_ArrayAdd($aRUB, StringTrimRight($Tag.innertext, 4) )
				$aRUB[0] += 1
			Case "usd"
				_ArrayAdd($aUSD, StringTrimRight($Tag.innertext, 4) )
				$aUSD[0] +=1
			Case "eur"
				_ArrayAdd($aEUR, StringTrimRight($Tag.innertext, 4) )
				$aEUR[0] +=1
		EndSwitch
	EndIf
Next

_ArrayDisplay($aRUB, "рубли")
_ArrayDisplay($aUSD, "доллары")
_ArrayDisplay($aEUR, "евро")
 
Автор
D

dreamorder

Гость
---Zak--- Простите за нубство мб, но в какое именно место вставить Ваш пример в моих модулях? что то я совсем :stars:
Ещё раз прошу прощения :smile:

P.s. ... '(?s).*?Fixed["'']*>(.*?)<' ... не работает :scratch:

Код:
$pDatausd = $oRequestusd.ResponseText ; получаем текст всей страницы сайта  в  $pDatausd
	$x1usd = StringRegExp($pDatausd, '(\d+\.\d+)', 3) ; ищем текст в HTML





Добавлено:
Сообщение автоматически объединено:

C2H5OH Спасибо ещё раз за трату времени на мою задачку! :smile:

P.S. Разбираюсь, тестю ...


Добавлено:
Сообщение автоматически объединено:

C2H5OH А можно описание каждой строки кода? :scratch:
Очень прошу, мну мозг "въезжает" только на примерах, теория - мертва(как кто то говорил) :smile:

И некоторые ... - " innertext ", для такого, я так и не нашёл внятного описания, а точнее вообще ни какого, где, в какой папке это найти? Или скачать библиотеку, или ещё что то ? У мну полный пакет установлен по ссылке этого сайта, и ещё один отдельно.
Но, как разобраться в некоторых библиотеках (как не прискорбно) не могу, в виду отсутствия активных ссылок, при наведении ... .



Добавлено:
Сообщение автоматически объединено:

Мнда, я думал что на полпути к освоению Autoit, а оказывается - только новичок! :'(
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А это не AutoIt. Это HTML.
В интерннете полно описаний. Вот, например, http://depositfiles.od.ua/tags/innertext.php
 
Автор
D

dreamorder

Гость
C2H5OH А это форум ... ;)

И если что ... , тут и выкладывают свои задачи и проблемы!!!



Добавлено:
Сообщение автоматически объединено:

Тут вообще есть "ГУРУ" ?!?!?! :'(


Добавлено:
Сообщение автоматически объединено:

Интересно, если обратиться к создателям ... , они смогут ... ?! )))
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
dreamorder,
Дайте ссылку на Вашу страницу или, если она у Вас секретная, полный HTML код этой страницы.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Держите регулярку:
Код:
#include <Array.au3>
$sHTML = '<li>1000 = <div case="usd" style="display: inline" href="/currency/chart/usd" class="aisStaticWindow aisStaticWindowFixed">112.78 USD</div></li>' ;Переменная содержит код страницы
$aRet = StringRegExp($sHTML,'>(\d+(\.?)(?(2)\d{1,2}))\s*(USD|EUR|RUB)',1)
If IsArray($aRet) Then
	_ArrayDisplay($aRet)
EndIf

;D
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может этого достаточно ?:
Код:
#Include<Array.au3>
$sText = " <span>"  & @CRLF & _ 
"                            <ul>"  & @CRLF & _ 
"                                <li>1000 = <div case='usd' style='display: inline' href='/currency/chart/usd' class='aisStaticWindow aisStaticWindowFixed'>112.78 USD</div></li>"  & @CRLF & _ 
"                                <li>1000 = <div case='eur' style='display: inline' href='/currency/chart/eur' class='aisStaticWindow aisStaticWindowFixed'>100.00 EUR</div></li>"  & @CRLF & _ 
"                                <li class='last'>1000 = <div case='rub' style='display: inline' href='/currency/chart/rub' class='aisStaticWindow aisStaticWindowFixed'>3060.11 RUB</div></li>"  & @CRLF & _ 
"                            </ul>"  & @CRLF & _ 
"                        </span>"

$sPatern = "(?i)>\h*([\d\.]+)\h*(?:eur|usd|rub)\h*</div>"
$aResult = StringRegExp( $sText, $sPatern, 3 )
_ArrayDisplay($aResult, ' Test Result ')
 
Автор
D

dreamorder

Гость
madmasles https://50btc.com/#wizard страничка примера.
 
Верх