Автор Тема: Почему не срабатывает "иначе" в условной подмаске?  (Прочитано 1094 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 546
  • Репутация: 26
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Хотел получить цену со скидкой, если есть скидка, если нет скидки, то полную цену.
Цену со скидкой получить могу, а без скидки не получается т.к. не срабатывает "иначе".
На всякий случай на "иначе" установил выражение на получение всего текста, но и это не помогает
В чем может быть проблема?

Код: AutoIt [Выделить]
#include <Array.au3>

$Mask = 'id="Price">(?(?=(?s).*?discount(?s).*?)(?s).*?class="add\-discount\-text\-price">(.*?)\D(?s).*?|((?s).*?))id="price\-tmpl">'

$URL = 'https://www.wildberries.ru/catalog/6474480/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result)

$URL = 'https://www.wildberries.ru/catalog/4736240/detail.aspx?targetUrl=GP'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result)

Func GetURLData($URL)
    Local $URLData, $URLDataString

    $URLData=InetRead($URL)
    If @error Then Return SetError(1, 0, 0)
    $URLDataString=BinaryToString($URLData)
    If @error Then Return SetError(2, 0, 0)
    Return $URLDataString
EndFunc
 


Русское сообщество AutoIt


Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 927
  • Репутация: 372
    • Награды
  • Версия AutoIt: 3.3.8.1
Нетуда смотришь
Код: AutoIt [Выделить]
(?s).*?"price" content="([^"]+).*


Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 546

  • Автор темы
  • Репутация: 26
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Я раньше оттуда и брал цену, но это не подходит т.к. цена на товар остается даже если товара нет в наличии.
Мне нужно получать цену только если есть товар

Код: AutoIt [Выделить]
#include <Array.au3>

;~ $Mask = 'id="Price">(?(?=(?s).*?discount(?s).*?)(?s).*?class="add\-discount\-text\-price">(.*?)\D(?s).*?|((?s).*?))id="price\-tmpl">'
$Mask = '(?s).*?"price" content="([^"]+).*'


$URL = 'https://www.wildberries.ru/catalog/6474480/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result)

$URL = 'https://www.wildberries.ru/catalog/4736240/detail.aspx?targetUrl=GP'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result)

$URL = 'https://www.wildberries.ru/catalog/5460135/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result)



Func GetURLData($URL)
    Local $URLData, $URLDataString

    $URLData=InetRead($URL)
    If @error Then Return SetError(1, 0, 0)
    $URLDataString=BinaryToString($URLData)
    If @error Then Return SetError(2, 0, 0)
    Return $URLDataString
EndFunc
 


Русское сообщество AutoIt

Re: Почему не срабатывает "иначе" в условной подмаске?
« Ответ #2 Отправлен: Январь 19, 2019, 18:49:26 »

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 927
  • Репутация: 372
    • Награды
  • Версия AutoIt: 3.3.8.1
Код: AutoIt [Выделить]
(?m)(?(?="add-discount-text-price">\d+)"add-discount-text-price">|id="Price">[^/]+^)(\d+)


Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 546

  • Автор темы
  • Репутация: 26
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Большое спасибо. Теперь понятно почему не работало условие.
Столкнулся с еще одной проблемой, если цена от 1000, то она указывается с пробелом после тысяч.
Для обозначения пробела используется ряд символов - &#xA0;
Цена 1058 указана как <span class="add-discount-text-price">1&#xA0;085&#xA0;СЂСѓР±.</span>

Я немного изменил маску чтобы выкинуть вышеуказанный ряд символов
Но такая маска возвращает два значения. Можно сделать маску которая будет возвращать одно значение?
Код: AutoIt [Выделить]
#include <Array.au3>

$Mask = '(?m)(?(?="add-discount-text-price">\d+)"add-discount-text-price">|id="Price">[^/]+^)(\d+)(?:&#38;#xA0;)?(\d+)'


$URL = 'https://www.wildberries.ru/catalog/6474480/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result, '1')

$URL = 'https://www.wildberries.ru/catalog/4736240/detail.aspx?targetUrl=GP'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result, '2')

$URL = 'https://www.wildberries.ru/catalog/5460135/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result, '3')

$URL = 'https://www.wildberries.ru/catalog/6101204/detail.aspx'
$URLData = GetURLData($URL)
$Result = StringRegExp($URLData, $Mask, 1)
_ArrayDisplay($Result, '4')



Func GetURLData($URL)
    Local $URLData, $URLDataString

    $URLData=InetRead($URL)
    If @error Then Return SetError(1, 0, 0)
    $URLDataString=BinaryToString($URLData)
    If @error Then Return SetError(2, 0, 0)
    Return $URLDataString
EndFunc

 


Русское сообщество AutoIt

Re: Почему не срабатывает "иначе" в условной подмаске?
« Ответ #4 Отправлен: Январь 26, 2019, 00:15:28 »

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 927
  • Репутация: 372
    • Награды
  • Версия AutoIt: 3.3.8.1
Код: AutoIt [Выделить]
$Mask = '(?m)(?(?="add-discount-text-price">\d+)"add-discount-text-price">|id="Price">[^/]+^)(\d+)'
$URLData=StringReplace($URLData,'&#160;','')


Русское сообщество AutoIt

Re: Почему не срабатывает "иначе" в условной подмаске?
« Ответ #5 Отправлен: Январь 26, 2019, 01:06:46 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
13597 Просмотров
Последний ответ Октябрь 07, 2009, 09:36:42
от akoulev
12 Ответов
13724 Просмотров
Последний ответ Декабрь 01, 2012, 02:05:11
от defens
14 Ответов
15938 Просмотров
Последний ответ Февраль 15, 2010, 11:29:38
от akoulev
9 Ответов
13829 Просмотров
Последний ответ Март 26, 2010, 14:39:23
от Garrett
4 Ответов
6124 Просмотров
Последний ответ Апрель 05, 2011, 01:06:51
от assch
2 Ответов
3068 Просмотров
Последний ответ Март 31, 2012, 16:45:37
от agikon
3 Ответов
4678 Просмотров
Последний ответ Август 25, 2013, 10:36:23
от Godygadu
6 Ответов
4977 Просмотров
Последний ответ Март 26, 2014, 16:36:48
от Alex Tevton
5 Ответов
2019 Просмотров
Последний ответ Июль 29, 2015, 19:29:00
от alex33
4 Ответов
2658 Просмотров
Последний ответ Октябрь 11, 2015, 05:04:39
от cosmos