Что нового

Парсинг строки, извлечение числа из нее и работа с ним (переход по стр-м поиска)

bazanski

Новичок
Сообщения
9
Репутация
0
Доброго времени суток, при написании скрипта по сбору информации со страницы столкнулся с такой проблемой, после заполнения формы поиска и выполнении его я получаю страницу с результатами, но иногда этих результатов более одной страницы, так вот мне необходимо сделать переход по этим страницам, увы кнопки "следующая" там нет, но есть ссылки с номерами страниц "2", "3", "..." по ним я перемещаюсь с помощью _IELinkClickByText($oIE, "2") , но вот как проверить то сколько таких ссылок на странице. Для этого на странице после поиска появляется надпись
"Найдено 72 дел", на странице отображается по 25 дел, следовательно если найдено 72, то всего будет 3 страницы, так вот я хочу научить скрипт парсить эту строчку и вытаскивать цифру, чтобы потом ее делить на 25 и определять таким образом кол-во страниц.
Вот так эта строчка выгладит в коде страницы:
<span class="b-found" style="">Найдено 72 дел</span>

Прошу, помогите написать скрипт или предложить другой способ перехода по страницам.
Заранее спасибо.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
bazanski

Попробуй так:
Код:
$sText = '<span class="b-found" style="">Найдено 72 дел</span>'
$start = 'Найдено '
$end = ' дел'
$sPattern = '(?s).*?' & $start & '(\d*?)' & $end & '?.*'
$source = StringRegExpReplace($sText, $sPattern, '\1')
MsgBox(0, 'Найдено:', $source)
 

SemEMP

Знающий
Сообщения
42
Репутация
7
Во функция возвратит число дел в цифрах, где ей передаешь параметр с
Код:
_IEAttach

Код:
Func GetNum($oIE)
	local $a[1]
	$oElements = _IETagNameGetCollection ($oIE,'span')
	For $oElement In $oElements
		if $oElement.classname=='b-found' Then
			$a=stringregexp($oElement.innertext,'\s(\d+?)\s',3)
			Return Number($a[0])
		EndIf
	Next
EndFunc
 
Автор
B

bazanski

Новичок
Сообщения
9
Репутация
0
WSWR
Фраза "Найдено 72 дел" меняется а именно цифра каждый раз разная одинаковое только начало и конец.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bazanski,
Можно так.
Код:
$iPageLimit = 25
For $i = 1 To 10
	$iRand = Random(10, 1000, 1)
	$sText = '<span class="b-found" style="">Найдено ' & $iRand & ' дел</span>'
	$vRes = StringRegExpReplace($sText, '[^\d]', '')
	$iCountPages = Ceiling($vRes / $iPageLimit)
	ConsoleWrite(StringFormat('Random: %5s\tResult: %5s\tPages: %5s\n', $iRand, $vRes, $iCountPages))
Next



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

bazanski [?]
или предложить другой способ перехода по страницам
А как выглядят адреса 2-ой и далее страниц по сравнению с адресом первой?
 
Автор
B

bazanski

Новичок
Сообщения
9
Репутация
0
madmasles
адрес в строке не меняется, так как содержимое страницы заменяется javascriptом , ссылки имееют вид "адрес.ru/#page2".
я испробывал ответSemEMP он сработал)
 
Верх