#include <INet.au3>
#include <array.au3>
#include <Excel.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "GUIFFLabel.au3"
Global $pData
Global Const $xlUp = -4162
Global $xls_type = '.xls'
Global $site[2]
Global $param[2]
Global $title[2]
Global $lastPage[1]
Global $xls_file = '\kyrtizanki_ru' ;название файла
Global $phone = '(?<=</div><a href=").*(?=" title)' ;строка поиска ссылок на персональные страницы
$site[0]= 'http://kyrtizanki.ru'
$site[1]= ''
$title[0] = 'МСК'
$title[1] = 'Питер'
$param[0] = '/&page='
$param[1] = ''
Global $paramLast = '' ; параметр после номера страницы
Global $repeat = True ; страницы повторяются бесконечно. Если true, то ищется номер последней страницы
Global $lastPageExp = "(?<=\. <span><a href='/&page=).*(?='><)" ; строка посика последней страницы
$Form = GUICreate("Парсер", 200, 50, -1, -1, $WS_POPUP)
;~ GUICtrlCreateLabel('Please Wait...', 10, 20, 180, 17, $SS_CENTER)
$iLabel = _GUICtrlFFLabel_Create($Form, "Please Wait...", 10, 17, 180, 17)
GUISetState(@SW_SHOW)
If $site[1] = '' Then
$q=0
Else
$q=1
EndIf
For $z=0 To $q
Local $arrPhone[1]
$arrPhone[0] = $title[$z]
If $repeat Then
$pData = _INetGetSource($site[$z])
$lastPage = StringRegExp($pData, $lastPageExp, 1)
EndIf
If Not IsArray($lastPage) Then Local $lastPage[1] = [1]
;~ MsgBox(64, '', $lastPage[0])
;~ Exit
_GUICtrlFFLabel_SetData($iLabel, 'Сбор анкет...')
Global $i = 0
While True
$i+=1
$pData = _INetGetSource($site[$z] & $param[$z] & $i & $paramLast)
;~ $pData = StringRegExpReplace($pData, '[\h-()+]', '')
$arrList = StringRegExp($pData, $phone, 3)
If @error > 0 Then ExitLoop
_ArrayConcatenate($arrPhone, $arrList)
If $lastPage[0] = $i Then ExitLoop
;~ ExitLoop
WEnd
$arrPhone = ArrayUnique($arrPhone)
;~ _ArrayDisplay($arrPhone)
;~ Exit
_GUICtrlFFLabel_SetData($iLabel, 'Сбор телефонов...')
Local $tt = UBound($arrPhone)
For $i = 1 To UBound($arrPhone) - 1
$pData = _INetGetSource($arrPhone[$i]) ; $site[$z] & $arrPhone[$i]
$pData = StringRegExpReplace($pData, '[\h-()+]', '')
$arrList = StringRegExp($pData, '(?<=потелефону).+(?=иВам)', 1)
;~ $arrPhone[$i] = StringMid($pData, StringInStr($pData, "потелефону")+10, StringInStr($pData, "иВам") - StringInStr($pData, "потелефону")-10)
If Not @error Then
$arrPhone[$i] = $arrList[0]
EndIf
_GUICtrlFFLabel_SetData($iLabel, 'Сбор телефонов: ' & Round(($i-1)*100/$tt, 2) & ' %')
Sleep(10)
Next
$arrPhone = ArrayUnique($arrPhone)
;~ _ArrayDisplay($arrPhone)
;~ Exit
Excel_Create()
Next
Func Excel_Create()
$oError = ObjEvent('AutoIt.Error', '_Error')
If FileExists(@ScriptDir & $xls_file & $xls_type) Then
$oExcel = _ExcelBookOpen(@ScriptDir & $xls_file & $xls_type)
Else
$oExcel = _ExcelBookNew()
_ExcelBookSaveAs($oExcel, @ScriptDir & $xls_file)
EndIf
$iMaxRowCnt = $oExcel.Rows.Count
Switch $z
Case 0
$RowName = 'A'
Case 1
$RowName = 'B'
EndSwitch
$iLastRow = $oExcel.Cells($iMaxRowCnt, $RowName ).End($xlUp).Row
If $iLastRow > 1 Then
$iLastRow += 1
_ArrayDelete($arrPhone, 0)
EndIf
_ExcelWriteArray($oExcel, $iLastRow, $z+1, $arrPhone, 1, 0)
_ExcelBookClose($oExcel)
EndFunc
Func ArrayUnique($aArray, $iBase = 0, $oBase = 0)
If Not IsArray($aArray) Then Return SetError(1, 0, 0) ;not an array
If UBound($aArray, 0) > 1 Then Return SetError(2, 0, 0) ;array is greater than a 2D array
If UBound($aArray) = $iBase + 1 Then Return SetError(3, 0, $aArray) ;array is already unique because of only 1 element
Local $i
If $iBase And UBound($aArray) - 1 <> $aArray[0] Then Return SetError(4, 0, 0)
Local $sData = '', $sSep = ChrW(160), $flag
For $i = $iBase To UBound($aArray) - 1
If Not IsDeclared($aArray[$i] & '$') And $aArray[$i] <> '' Then ;
Assign($aArray[$i] & '$', 0, 1)
$sData &= $aArray[$i] & $sSep
EndIf
Next
If Not $oBase Then $flag = 2
Local $aUnique = StringSplit(StringTrimRight($sData, 1), $sSep, $flag)
Return SetError(0, 0, $aUnique)
EndFunc ;==>ArrayUnique