Что нового

[Данные, строки] Считывание определённого куска с HTML

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt: 3.4.1

Описание:

С этой странице http://www.amazon.de/gp/product/385703243X/ref=olp_product_details?ie=UTF8&me=
мне нужно вытащить цену "gebraucht" (в данном случае она сейчас 8,27) и показать в MsgBox

И как только цена уменьшится (не важно на сколько) - получить MsgBox с ауктуальной ценой.


Примечание:
Происходит своего рода мониторинг цены. Что бы сильно не нагружать - поставим интервал запроса 1 мин.
Я далеко не профи и буду очень рад Вашей помощи.
Огромное Спасибо.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$oldPrice = 0
While 1
	$aPrice = StringRegExp(BinaryToString(InetRead('http://www.amazon.de/gp/product/385703243X/ref=olp_product_details?ie=UTF8&me=', 1), 4), 'gebraucht.*?EUR\s*(\d+,\d\d)',1)
	If Not IsArray($aPrice) Then Exit MsgBox(0, '', 'Не правильный скрипт')
	If $aPrice[0] <> $oldPrice Then
		$oldPrice = $aPrice[0]
		MsgBox(0, 'Новая цена', $oldPrice)
	EndIf
	Sleep(1 * 60 * 1000)
WEnd
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: [

inververs сказал(а):
Код:
$oldPrice = 0
While 1
	$aPrice = StringRegExp(BinaryToString(InetRead('http://www.amazon.de/gp/product/385703243X/ref=olp_product_details?ie=UTF8&me=', 1), 4), 'gebraucht.*?EUR\s*(\d+,\d\d)',1)
	If Not IsArray($aPrice) Then Exit MsgBox(0, '', 'Не правильный скрипт')
	If $aPrice[0] <> $oldPrice Then
		$oldPrice = $aPrice[0]
		MsgBox(0, 'Новая цена', $oldPrice)
	EndIf
	Sleep(1 * 60 * 1000)
WEnd



Спасибо большое.

А какой будет StringRegExp здесь ? http://www.amazon.de/gp/offer-listing/385703243X/ref=dp_olp_used?ie=UTF8&condition=used
Слежение за самой низкой ценой, и до неё - самая верхняя строчка и предпоследняя в верху.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
inververs сказал(а):
Dk [?]
А какой будет StringRegExp здесь ? http://www.amazon.de/gp/offer-listing/385703243X/ref=dp_olp_used?ie=UTF8&condition=usedСлежение за самой низкой ценой - самая верхняя строчка.
Может быть такая:
Код:
a-size-large a-color-price olpOfferPrice a-text-bold.*?EUR (\d+,\d\d)
но я не проверял

А какой будет StringRegExp
Слежение за самой низкой ценой, и до неё - самая верхняя строчка и предпоследняя в верху. :-[ :-[ :-[ :-[ ?
Так как они одинаковые ... как я могу указать что мне например нужны первые 2-3 цены?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
inververs сказал(а):
в StringRegExp вместо 1 поставте 3.

Dk [?]
в массиве [ 0] элемент это первая цена, [1] - вторая цена итд.


В первом скрипте есть маленький проблемка.
Он не находит цены если они ниже 1.
Например здесь
http://www.amazon.de/gp/offer-listing/3424009172/ref=sr_1_1_twi_har_1_olp?s=books&ie=UTF8&qid=1453662341&sr=1-1&keywords=3424009172
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ну что я могу сказать, кто нибудь допишет ;D, а потом перепишет, а потом доделает итп, пока вы не определитесь
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
inververs сказал(а):
ну что я могу сказать, кто нибудь допишет ;D, а потом перепишет, а потом доделает итп, пока вы не определитесь

Так я определился. Просто Ваш скрипт работает не совсем корректно, он не видит чисел меньше 1. :'( :'(

Код:
$oldPrice = 0
While 1
    $aPrice = StringRegExp(BinaryToString(InetRead('http://www.amazon.de/gp/offer-listing/3424009172/ref=sr_1_1_twi_har_1_olps=books&ie=UTF8&qid=1453662341&sr=1-1&keywords=3424009172', 1), 4), 'gebraucht.*?EUR\s*(\d+,\d\d)',1)
    If Not IsArray($aPrice) Then Exit MsgBox(0, '', 'Не правильный скрипт')
    If $aPrice[0] <> $oldPrice Then
        $oldPrice = $aPrice[0]
        MsgBox(0, 'Новая цена', $oldPrice)
    EndIf
    Sleep(1 * 60 * 1000)
WEnd


А остальные вопросы они были просто дополнительные)
 
A

Alofa

Гость
И да простит меня inververs, за такую доработку.
Код:
$oldPrice = -1
While 1
    $sString = BinaryToString(InetRead('http://www.amazon.de/gp/product/385703243X/ref=olp_product_details?ie=UTF8&me=', 1), 4)
    $aPrice = StringRegExp($sString, 'gebraucht.*?EUR\h*?(\d+?),?(\d*?)</span>', 1)
    If Not @error Then
        If $aPrice[1] Then $aPrice[0] = $aPrice[0] & '.' & $aPrice[1]
        If $aPrice[0] <> $oldPrice Then
            If $oldPrice = -1 Then $oldPrice = 'Неизвестно'
            MsgBox(0, 'Цена', 'Старая цена: ' & $oldPrice & @LF & 'Новая цена: ' & $aPrice[0])
            $oldPrice = $aPrice[0]
        EndIf
    Else
        MsgBox(16, 'Ошибка!', 'Не удалось определить цену.')
    EndIf
    Sleep(1 * 60 * 1000)
WEnd

Dk сказал(а):
Dk этот скрипт не есть универсальное решение для всех страниц интернета.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Alofa сказал(а):
И да простит меня inververs, за такую доработку.

Код:
$oldPrice = -1
While 1
	$sString = BinaryToString(InetRead('http://www.amazon.de/gp/product/385703243X/ref=olp_product_details?ie=UTF8&me=', 1), 4)
	$aPrice = StringRegExp($sString, 'gebraucht.*?EUR\h*?(\d+?),?(\d*?)</span>', 1)
	If Not @error Then
		If $aPrice[1] Then $aPrice[0] = $aPrice[0] & '.' & $aPrice[1]
		If $aPrice[0] <> $oldPrice Then
			If $oldPrice = -1 Then $oldPrice = 'Неизвестно'
			MsgBox(0, 'Цена', 'Старая цена: ' & $oldPrice & @LF & 'Новая цена: ' & $aPrice[0])
			$oldPrice = $aPrice[0]
		EndIf
	Else
		MsgBox(16, 'Ошибка!', 'Не удалось определить цену.')
	EndIf
	Sleep(1 * 60 * 1000)
WEnd


Dk сказал(а):
Dk этот скрипт не есть универсальное решение для всех страниц интернета.


Да, у вас работает.
Напишите пожалуйста StringregExp для этой странице
http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used
 
A

Alofa

Гость
Dk сказал(а):
Напишите пожалуйста StringregExp для этой странице
http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used
Возможно только после тог, как вы полностью и подробно сформулируете то, что хотите.

P.s: название темы-то, не айс.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Alofa сказал(а):
Dk сказал(а):
Напишите пожалуйста StringregExp для этой странице
http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used
Возможно только после тог, как вы полностью и подробно сформулируете то, что хотите.

P.s: название темы-то, не айс.


У Вас всё правильно и всё работает. Мне нужен тот же самый пример, только именно с той страницей, которую я дал сейчас (где цена именно 0.01)

http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used
Мне нужна самая верхняя цена (минимальная цена, она 0.01)
У inververs скрипт не находит число/цифру, которые меньше 1.




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

Dk сказал(а):
Alofa сказал(а):
Dk сказал(а):
Напишите пожалуйста StringregExp для этой странице
http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used
Возможно только после тог, как вы полностью и подробно сформулируете то, что хотите.

P.s: название темы-то, не айс.


Ещё ни у кого не получилось найти. Если число больше 1,00 - то проблем нет. Даже я со своими знаниями могу найти. Но если меньше 1,00, то у всех БЕДА :'( :'(
 
A

Alofa

Гость
Код:
Local $hTimer = TimerInit(), $oldPrice = -1
Local $sSite = 'http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used'

While 1
    $aPrice = StringRegExp(BinaryToString(InetRead($sSite, 1), 4), 'olpOfferPrice a-text-bold">\h+EUR\h*?(\d+?,?\d*?)\h+</span>', 1)
    If Not @error Then
        If $aPrice[0] <> $oldPrice Then
            If $oldPrice = -1 Then $oldPrice = 'Неизвестно'
            MsgBox(0, 'Цена', 'Старая цена: ' & $oldPrice & @LF & 'Новая цена: ' & $aPrice[0], 85) ; Время существования окна 85 сек.
            $oldPrice = $aPrice[0]
        EndIf
    Else
        MsgBox(16, 'Ошибка!', 'Не удалось определить цену.')
    EndIf
    Do ; Ожидание периода 1 минута.
		Sleep(500)
	Until TimerDiff($hTimer) >= 60000
WEnd



Dk сказал(а):
Но если меньше 1,00, то у всех БЕДА
Не важно - главное, чтобы там вообще цифра была.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Alofa сказал(а):
Код:
Local $hTimer = TimerInit(), $oldPrice = -1
Local $sSite = 'http://www.amazon.de/gp/offer-listing/3424009172/ref=dp_olp_used?ie=UTF8&condition=used'

While 1
    $aPrice = StringRegExp(BinaryToString(InetRead($sSite, 1), 4), 'olpOfferPrice a-text-bold">\h+EUR\h*?(\d+?,?\d*?)\h+</span>', 1)
    If Not @error Then
        If $aPrice[0] <> $oldPrice Then
            If $oldPrice = -1 Then $oldPrice = 'Неизвестно'
            MsgBox(0, 'Цена', 'Старая цена: ' & $oldPrice & @LF & 'Новая цена: ' & $aPrice[0], 85) ; Время существования окна 85 сек.
            $oldPrice = $aPrice[0]
        EndIf
    Else
        MsgBox(16, 'Ошибка!', 'Не удалось определить цену.')
    EndIf
    Do ; Ожидание периода 1 минута.
		Sleep(500)
	Until TimerDiff($hTimer) >= 60000
WEnd

Огромное спасибо))! Всё работает.
К сожалению пока не могу отблагодарить так как 1 раз в 24 часа можно) Но обязательно))
 

Garrett

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

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


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





Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Данные, строки] Считывание определённого куска с HTML" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Верх