#include <Array.au3>
Global $oRequest
Dim $ARRAY_Y[1][5] ;Используется для получения списка записей
;~ $ARRAY_Y[i][0] - Герой
;~ $ARRAY_Y[i][1] - Результат
;~ $ARRAY_Y[i][2] - Дата матча
;~ $ARRAY_Y[i][3] - Время матча
;~ $ARRAY_Y[i][4] - ID матча
;~ ----------------------------------------------------------------------------------------------------------------
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') ;Создаём COM-объект
If @error Then
MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
Exit 1
EndIf
$oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc')
;~ ----------------------------------------------------------------------------------------------------------------
$oRequest.Open('GET', 'https://ru.dotabuff.com/players/68730725/matches', 0)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.Send()
$oRequest.WaitForResponse
$sData = $oRequest.ResponseText
$PageS = StringRegExp($sData, '(?s).*?class=["'']*last["'']*>.*?page=(.*?)["'']*>Last', 3) ; Сколько всего страниц
ConsoleWrite("-Всего страниц на обработку - "&$PageS[0]&@CRLF)
;~ ----------------------------------------------------------------------------------------------------------------
For $Page = 1 To 3 ; Вместо "3" можно подставить "$PageS[0]", но для теста взято 3 страницы...
$oRequest.Open('GET', 'https://ru.dotabuff.com/players/68730725/matches?page='&$Page, 0)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.Send()
$oRequest.WaitForResponse
$sData = $oRequest.ResponseText
$REC = '(?s).*?<tr data-link-to.*?class=["'']*hero-link["'']*>(.*?)</a>.*?<td><a.*?class.*?>(.*?)</a><div.*?class=["'']*timeago["'']* datetime=["'']*(.*?)T(.*?)Z["'']* title.*?class=["'']*matchid["'']*>(.*?)</a>.*?</tr>'
$ARRAY_Y = _ArrIN($sData, $REC, $ARRAY_Y)
ConsoleWrite("-Пастинг "&$Page&" стр выполнен"&@CRLF)
Next
_ArrayDisplay($ARRAY_Y, "Cписок")
Func _ArrIN($DATA, $PATTERN, $ARR)
Local $STR
$APro_Text = StringRegExp($DATA, $PATTERN, 3)
If Not @error Then
For $i = 0 To UBound($APro_Text)-1 Step UBound($ARR, 2)
$STR = ""
For $i2 = 0 To UBound($ARR, 2)-1
If $i2 > 0 Then $STR = $STR &"~"
$STR = $STR&$APro_Text[$i+$i2]
Next
_ArrayAddEx($ARR, $STR)
Next
EndIf
Return $ARR
EndFunc
Func _ArrayAddEx(ByRef $avArray, $vValue)
If Not IsArray($avArray) Then Return SetError(1, 0, -1)
Local $iRows, $iCols, $iDims, $aSplit_Val
$iRows = UBound($avArray)
$iCols = UBound($avArray, 2)
$iDims = UBound($avArray, 0)
If $iDims > 2 Then Return SetError(2, 0, -1)
If $iDims = 1 Then
ReDim $avArray[$iRows + 1]
$avArray[$iRows] = $vValue
Return $iRows
Else
ReDim $avArray[$iRows + 1][$iCols]
$aSplit_Val = StringSplit($vValue, "~")
For $i = 0 To $iCols-1
If $i+1 > $aSplit_Val[0] Then ExitLoop
$avArray[$iRows][$i] = $aSplit_Val[$i+1]
Next
Return $iRows
EndIf
EndFunc
Func ErrorFunc()
MsgBox(16, 'Ошибка', $oErrorHandler.description)
Exit 2
EndFunc
For $Page = 1 To 3
For $Page = 1 To $PageS[0]
;~ $ARRAY_Y[i][0] - Герой
;~ $ARRAY_Y[i][1] - Результат
;~ $ARRAY_Y[i][2] - Дата матча
;~ $ARRAY_Y[i][3] - Время матча
;~ $ARRAY_Y[i][4] - ID матча
UBound($ARRAY_Y,1)
For $Page = 1 To $PageS[0] ; Вместо "3" можно подставить "$PageS[0]", но для теста взято 3 страницы...
$oRequest.Open('GET', 'https://ru.dotabuff.com/players/68730725/matches?page='&$Page, true)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.Send()
ConsoleWrite($oRequest.StatusText)
Next
For $Page = 1 To $PageS[0] ; Вместо "3" можно подставить "$PageS[0]", но для теста взято 3 страницы...
$oRequest.Open('GET', 'https://ru.dotabuff.com/players/68730725/matches?page='&$Page, true)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.Send()
While $oRequest.StatusText <> "OK"
;~ ConsoleWrite($oRequest.StatusText)
$oRequest.Open('GET', 'https://ru.dotabuff.com/players/68730725/matches?page='&$Page, true)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.Send()
$oRequest.StatusText
Sleep(100)
WEnd
$sData = $oRequest.ResponseText
$REC = '(?s).*?<tr data-link-to.*?class=["'']*hero-link["'']*>(.*?)</a>.*?<td>.*?class.*?>(.*?)</a>.*?class=["'']*timeago["'']* datetime=["'']*(.*?)T(.*?)Z["'']* title.*?class=["'']*matchid["'']*>(.*?)</a>.*?</tr>'
$ARRAY_Y = _ArrIN($sData, $REC, $ARRAY_Y)
ConsoleWrite("-Пастинг "&$Page&" стр выполнен"&@CRLF)
Next
#include <Array.au3>
#include <Encoding.au3>
Dim $avArray2[1]
For $j = 1 To 10 ; СТРАНИЦЫ
$sText = _Encoding_CyrillicTo1251(BinaryToString(InetRead('https://ru.dotabuff.com/players/68730725/matches?page=' & $j)))
$aString = StringRegExp($sText, '">(.{1,50})</a', 3)
Dim $avArray[Ubound($aString)]
For $i = 1 To Ubound($aString) - 1
If StringInStr($aString[$i], 'Победа') Or StringInStr($aString[$i], 'Поражение') Then $avArray[$i]=$aString[$i - 1] & '_' & $aString[$i] & '_' & $aString[$i + 1]
Next
_ArrayConcatenate($avArray2, $avArray)
ReDim $avArray[1]
Next
$avArray2 = _ArrayClearEmpty1($avArray2)
_ArrayDisplay($avArray2)
Func _ArrayClearEmpty1($a_Array, $i_SubItem = 0, $i_Start = 0)
If Not IsArray($a_Array) Or UBound($a_Array, 0) > 2 Then Return SetError(1, 0, 0)
Local $i_Index = -1
Local $i_UBound_Row = UBound($a_Array, 1) - 1
Local $i_UBound_Column = UBound($a_Array, 2) - 1
If $i_UBound_Column = -1 Then $i_UBound_Column = 0
If $i_SubItem > $i_UBound_Column Then $i_SubItem = 0
If $i_Start < 0 Or $i_Start > $i_UBound_Row Then $i_Start = 0
Switch $i_UBound_Column + 1
Case 1
Dim $a_TempArray[$i_UBound_Row + 1]
If $i_Start Then
For $i = 0 To $i_Start - 1
$a_TempArray[$i] = $a_Array[$i]
Next
$i_Index = $i_Start - 1
EndIf
For $i = $i_Start To $i_UBound_Row
If String($a_Array[$i]) Then
$i_Index += 1
$a_TempArray[$i_Index] = $a_Array[$i]
EndIf
Next
If $i_Index > -1 Then
ReDim $a_TempArray[$i_Index + 1]
Else
Return SetError(2, 0, 0)
EndIf
Case 2
Dim $a_TempArray[$i_UBound_Row + 1][$i_UBound_Column + 1]
If $i_Start Then
For $i = 0 To $i_Start - 1
For $j = 0 To $i_UBound_Column
$a_TempArray[$i][$j] = $a_Array[$i][$j]
Next
Next
$i_Index = $i_Start - 1
EndIf
For $i = $i_Start To $i_UBound_Row
If String($a_Array[$i][$i_SubItem]) Then
$i_Index += 1
For $j = 0 To $i_UBound_Column
$a_TempArray[$i_Index][$j] = $a_Array[$i][$j]
Next
EndIf
Next
If $i_Index > -1 Then
ReDim $a_TempArray[$i_Index + 1][$i_UBound_Column + 1]
Else
Return SetError(2, 0, 0)
EndIf
EndSwitch
Return SetError(0, $i_UBound_Row - $i_Index, $a_TempArray)
EndFunc ;==>_ArrayClearEmpty1
'(?s).*?class=["'']*last["'']*>.*?page=(.*?)["'']*>Last'
'(?si)<span class="last">.*page=(.*?)">Last'
'(?si)<span class=.?last.?>.*?page=(.*?).?>Last'