Что нового

[Сеть, интернет] вытащить данные изменяющиеся данные из html

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
Добрый день!
в Autoit не силен, поэтому прошу помощи.
Необходимо в переменную записать числовые данные из html страницы.

Отрывок кода:
Код:
<text class="pin_text" style="font-family: 'Open Sans regular', 'Open Sans'; font-size: 14px; font-weight: bold; fill: #fff;" text-anchor="start" x="1421.61" y="2" dx="4" dy="3">[color=red]1.41707[/color]</text>
<text class="pin_text" style="font-size: 14px; font-style: normal; font-weight: bold; font-stretch: normal; fill: #333; text-anchor: end;" x="1477.5" y="31" dx="2" dy="-2">00:01</text>

Число 1.41707 и время 00:01 постоянно меняется.
Пытался сделать через регулярные выражения, но не получилось.
Направьте пожалуйста каким путем идти.
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Вот так я получаю уведомление о новом сообщении на форуме:
Код:
#include <IE.au3>
#include <Array.au3>

$result = '0'

While 1
	ToolTip('')
	check()
	Sleep(30*1000)
WEnd

Func check()
	$oIE = _IECreate("https://autoit-script.ru/index.php",'',0)
	_IELoadWait($oIE,100)
	$html = _IEDocReadHTML($oIE)

	Do
		Global $oLinks = _IETagNameGetCollection($oIE, 'div')
		Sleep(50)
	Until IsObj($oLinks)

	For $oLink In $oLinks
		If $oLink.getAttribute("class") == "hslice" Then
			$sResult=$oLink.innertext
			$sResult = StringRegExpReplace($sResult,"Русское сообщество AutoIt - Недавние сообщения","")
			$sResult = StringRegExpReplace($sResult,"Добавить веб-фрагмент в браузер","")
			$sResult=StringStripCR($sResult)
			$sResult=StringReplace($sResult, @LF, "+")
			$sResult=StringStripWS($sResult, 1)
			$sResult = StringSplit($sResult,'+')
			$aResult = ''

			If IsString($sResult[5]) And $sResult[5] <> $result Then
				For $i = 5 to $sResult[0]
					If IsString($sResult[$i]) Then
						$aResult = $aResult & $sResult[$i] & @CRLF
					EndIf
				Next

				$result = $sResult[5]
				$i = $sResult[0] - 2
				ToolTip($aResult,0,@DesktopHeight - @DesktopHeight / $i)

				ExitLoop
			EndIf
		EndIf
	Next

	_IEQuit($oIE)
EndFunc



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

У вас должно получиться как то так:
Код:
#include <IE.au3>
#include <Array.au3>

$http = "https://............"

Сheck()

Func Сheck()
	$oIE = _IECreate($http,'',0)
	_IELoadWait($oIE,100)

	Do
		Global $oLinks = _IETagNameGetCollection($oIE, 'text')
		Sleep(50)
	Until IsObj($oLinks)

	For $oLink In $oLinks
		If $oLink.getAttribute("class") == "pin_text" Then
			$sResult=$oLink.innertext
			MsgBox(0,'',$sResult)
		EndIf
	Next

	_IEQuit($oIE)
EndFunc

Вот вариант загружать html и искать текст в нем:
Dima1337 сказал(а):
А загружать только html пробовали?
Код:
#Include <INet.au3> ;Подключаем библиотеку

$HTML = _INetGetSource('http://www.medimops.de/stoelting-robert-f-anaesthesie-bei-begleiterkrankungen-gebundene-ausgabe-M03437116746.html?variant=UsedVeryGood') ;Получаем HTML код страницы
ConsoleWrite('html get'&@CRLF)
$st0 = StringRegExp($HTML,'<span class="mx-price">[0-9,]{1,7}',1)
$mac = StringRegExpReplace($st0[0],'<span class="mx-price">',"")
ConsoleWrite('price: '&$mac&@CRLF)


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

Так же ознакомьтесь с этой темой, там есть еще несколько решений:
https://autoit-script.ru/index.php?topic=23500.0

ЗЫ Поместите весь html код в тег: [code][/code]
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pozitif4ik

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.






Dima1337 [?]
Так же ознакомьтесь с этой темой
Разные данные при считывание цены со страниц в разных браузерах
Так гораздо симпатичнее, не правда ли?
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
OffTopic:
[url=https://...]...[/url]
Спасибо, а то думал как такую ссылку делать :-[
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Dima1337 [?]
а то думал как такую ссылку делать :-[
Век живи - век учись. В этом ничего постыдного нет. ;)
P.S. Лучше спросить и выглядеть глупым в течении нескольких минут, чем промолчать и оставаться им всю жизнь.
 
Автор
P

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
Спасибо за направление.
Скрипт работает но немного не так, как бы хотелось.
Как сделать чтобы число и время записывались одновременно в разные элементы массива или в разные переменные?
Пока работает только поочередная запись в 1 переменную или в 1 элемент массива.
Основная цель записывать в разные переменные данные числа при таймере равным 00:00.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <Array.au3>
$http = 'https://...'
$oIE = _IECreate($http,'',1)
_IELoadWait($oIE,50)
Global $mas[2]
Dim $y
Dim $sResult
Func sot()
while 1
   Do
	  Global $oLinks = _IETagNameGetCollection($oIE, 'text')
	  Sleep(10)
	  Until IsObj($oLinks)



		  For $oLink In $oLinks
		 If $oLink.getAttribute("class") == "pin_text"  Then
			For $i=0 To 1 step 1
			$mas[$i]=$oLink.innertext
			MsgBox(64, $mas[0], $mas[1])
		 Next
		  EndIf

;~ 		 MsgBox(64, $mas[0], $mas[1])

;~ 	  MsgBox(32, $mas[0], $mas[1])
   Next
WEnd
EndFunc

#Region ### START Koda GUI section ### Form=E:\Новая папка (2)\Новая папка (2)\Form1.kxf
$Form1 = GUICreate("Form1", 615, 437, 304, 172)
$Button1 = GUICtrlCreateButton("Старт", 128, 208, 115, 57)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

		Case $Form1
		Case $Button1
		  sot()
	EndSwitch
WEnd
 
Автор
P

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
Вижу выход только в регулярных выражениях, но что то идет не так. Выводит 0, в чем может быть ошибка?
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <Array.au3>
#Include <INet.au3>
$http = 'https://...'
$oIE = _IECreate($http,'',1)
_IELoadWait($oIE,50)
Global $i=0
Global $asResult

Global $HTML

Func sot()

while 1
   Do
	  Global $oLinks = _IETagNameGetCollection($oIE, 'text')
	  Sleep(3000)
	  Until IsObj($oLinks)

   For $oLink In $oLinks
	  If $oLink.getAttribute("class") == "pin_text"  Then
		$HTML=_INetGetSource($http)

		$asResult = StringRegExp($HTML, 'font-size: 14px; font-weight: bold; fill: #fff;" text-anchor="start" x="1413.34" y="2" dx="4" dy="3">(\d\d\d\d.\d\d\d)</text>', 1)
      
		 MsgBox(1, $asresult, $asresult)
EndIf





   Next

WEnd
;~    _IEQuit($oIE)
EndFunc

#Region ### START Koda GUI section ### Form=E:\Новая папка (2)\Новая папка (2)\Form1.kxf
$Form1 = GUICreate("Form1", 615, 437, 304, 172)
$Button1 = GUICtrlCreateButton("Старт", 128, 208, 115, 57)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

		Case $Form1
		Case $Button1
		  sot()
	EndSwitch
WEnd
 
Автор
P

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
inververs сказал(а):
Pozitif4ik [?]
Выводит 0, в чем может быть ошибка?
В msgbox нельзя вывести массив

Да точно, спасибо.

Составил такой костыль:

Код:
$sText=_IEDocReadHTML ($oIE)
$avArray=StringRegExp($sText, '>(\d.\d\d\d\d\d)</text>', 3)
_ArrayDisplay($avArray)


но находит 5 элементов, как сформировать регулярку, что бы искалось значение только в строке :
Код:
<text class="pin_text" style="font-family: 'Open Sans regular', 'Open Sans'; font-size: 14px; font-weight: bold; fill: #fff;" text-anchor="start" x="1421.61" y="2" dx="4" dy="3">[color=red]1.41707[/color]</text>
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pozitif4ik
Дайте ссылку на сайт с данными.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pozitif4ik
В какой момент появляются нужные данные или что нужно сделать для их появления? Распишите фазы работы скрипта.
 
Автор
P

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
Garrett сказал(а):
Pozitif4ik
В какой момент появляются нужные данные или что нужно сделать для их появления? Распишите фазы работы скрипта.

необходимые данные появляются после авторизации.
на скриншоте выделил необходимое значение, вся проблема в том, что значение может меняется каждую секунду. другими словами когда значение таймера = 00:00 значение переменной записывается в переменную и процедура начинается заново.(диапазон таймера 15 сек).
Как я вижу решение задачи:
1. находим регулярным выражением таймер, сравниваем его с "00:00"
2. находим регулярным выражением значение записываем в переменную
3. повторяем действие 1. и 2. (n раз) но переменные для записи должны быть каждый раз разные.
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    74 КБ · Просмотры: 13

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Pozitif4ik [?]
но переменные для записи должны быть каждый раз разные.
То есть, за 15 сек должно получиться 15 пар переменных. Я правильно понимаю?
 
Автор
P

Pozitif4ik

Новичок
Сообщения
8
Репутация
0
Garrett сказал(а):
Pozitif4ik [?]
но переменные для записи должны быть каждый раз разные.
То есть, за 15 сек должно получиться 15 пар переменных. Я правильно понимаю?

за 15 секунд только 1 переменная с необходимым значением числа, при значении таймера = 00:00, затем таймер заново начинает отсчет от 15 и когда таймер второй раз досчитает до 0 (станет равным 00:00) формируется 2 переменная со значением числа. таймер цикличен, отсчет от 15 до 0 и затем снова начинается отсчет от 15.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Pozitif4ik
Я не забыл про вас. Во время решения вашего вопроса возникла проблема синхронизации. Дело в том, что по по истечении времени на сайте (15 сек) документ заполняется новыми данными (Ajax). Отсюда возникают ошибки в обработки документа. Другими словами мы пытаемся получить данные, а их попросту ещё нет.
 
Верх