Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Выгрузка прокси с сайта

Ответить
Настройки темы
[решено] Выгрузка прокси с сайта

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет! Помогите чем могите Вроде бы все довольно просто, но никак не получается собраться с мыслями, то они заняты - то я... Да и с опытом беда.
Нужен скрипт автоматически выбирающий прокси с определенного сайта, допустим http://nntime.com - этот мне нравится, раздел подходит любой, загонять необходимое количество в тхт файл.
После нужна сортировка такого вида: прокси с одинаковым третьим октетом удаляются, т.е. если в списке есть 221.130.75.200, то 221.130.75.48 уже удаляется, а 221.130.76.17 остаётся.
У меня основная сложность с тем как в коде странички выделить именно отрезок с айпишником, ну и маской поиска ведь в любом из октетов может состоять из разного количества цифр 192.168.160.95 и 72.89.1.1, да и порт тоже бывает разный.
Строка с IP имеет код
<tr class="odd"><td><input type="checkbox" name="c3" id="row3" value="20612057442.53.171.1402666209980" onclick="choice()" /></td><td>202.53.171.140<script type="text/javascript">document.write(":"+m+y)</script></td>
При этом порт это 2 или 4 последних цифры value, а перед IP адресом всегда есть код onclick="choice()" /></td><td> и <script type="text/javascript">document.write - после
Пока есть только маленькая часть

Код: Выделить весь код
Dim $prot = "http://"
Dim $domen = "nntime.com"
Dim $delim = "/"
Dim $s_get = "proxy-list-01.htm"
Dim $s_page = "proxy-list-01.htm"
$oIE = _IECreateEmbedded ( )
$oIE = _IECreate ($domen&$delim&$s_page)
$Html = _IEDocReadHTML($oIE)
$get_data = _IEBodyReadHTML($oIE)

ну а дальше рисуем какую нибудь маску поиска =)
И то, помнится вроде как-то можно подключаться к страничке без её загрузки... так было бы удобнее, но пока не нашел как, с английским не совсем ферштейн. А если еще на ходу проверять IP на работоспособность, то вообще красота будет.

Отправлено: 21:07, 12-12-2010

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


zbruy,
Примерно так у меня получилось
Часть 1:
читать дальше »
Код: Выделить весь код
#include <Array.au3>
#include <INet.au3>

Opt('MustDeclareVars', 1)

Dim $aIP[1]
Dim $aWrite[1][2]
Global _
        $sStart = 'Поиск начат: ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & _
        @MIN & ':' & @SEC, _
        $sFile = @ScriptDir & '\' & @MDAY & '_' & @MON & '_' & @HOUR & '_' & _
        @MIN & 'proxy.txt', _
        $iN, $aTemp, $aResult, $hFile, $sEnd, $sRes, $iErr, $sTimer, $n = 0

$iN = _GetNumberPagesAll()
If @error Then
    MsgBox(16, '', 'Error')
    Exit
EndIf

For $i = 1 To $iN
    $aTemp = _GetProxyAll($i)
    If Not @error Then
        ToolTip('Обработана ' & $i & ' страница из ' & $iN, 0, 0)
        _ArrayConcatenate($aIP, $aTemp)
        $aIP[0] = UBound($aIP) - 1
    Else
        MsgBox(16, $i, 'Error')
    EndIf
Next
If Not $aIP[0] Then
    MsgBox(16, '', 'Error')
    Exit
EndIf
ToolTip('Идет обработка прокси', 0, 0)
$aResult = _ProxyUnique($aIP, '(\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d.*')
If @error Then
    MsgBox(16, $i, 'Error')
    Exit
EndIf
_ArrayDisplay($aResult)
TCPStartup()
For $i = 1 To $aResult[0][0]
    ToolTip('Идет проверка ' & $aResult[$i][0] & @CRLF & $i & ' из ' & $aResult[0][0], 0, 0)
    $sRes = _ProxyCheck($aResult[$i][0], 10)
    $iErr = @error
    $sTimer = @extended
    If Not $iErr Then
        If StringInStr($sRes, '200 OK') Then
            $sTimer = StringFormat('%.2f', $sTimer / 1000) & ' сек.'
            $aResult[$i][1] = @TAB & @TAB & @TAB & $sTimer
        Else
            $aResult[$i][1] = 'Bad'
        EndIf
    Else
        $aResult[$i][1] = 'Bad'
    EndIf
Next
TCPShutdown()
For $i = 1 To $aResult[0][0]
    If $aResult[$i][1] And $aResult[$i][1] <> 'Bad' Then
        $n += 1
        ReDim $aWrite[$n + 1][2]
        $aWrite[0][0] = $n
        $aWrite[$n][0] = $aResult[$i][0]
        $aWrite[$n][1] = $aResult[$i][1]
    EndIf
Next

$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sStart & @CRLF & 'Найдено ' & $aWrite[0][0] & ' прокси.' & @CRLF & @CRLF)
For $i = 1 To $aWrite[0][0]
    FileWrite($hFile, $aWrite[$i][0] & $aWrite[$i][1] & @CRLF)
Next
$sEnd = 'Поиск закончен: ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & _
        @MIN & ':' & @SEC
FileWrite($hFile, $sEnd)
FileClose($hFile)
ToolTip('')

MsgBox(64, 'Все готово', 'Найдено ' & $aWrite[0][0] & ' прокси. Прокси сохранены в файл ' & _
        @CRLF & $sFile)

Func _ProxyUnique($aArray, $sPattern)
    Dim $aReturn[1][2]
    Local $j = 0, $sIP, $iIndex
    If Not IsArray($aArray) Then Return SetError(1)
    For $i = 1 To $aArray[0]
        $sIP = StringRegExpReplace($aArray[$i], $sPattern, '\1')
        If Not @extended Then Return SetError(1)
        $iIndex = _ArraySearch($aArray, $sIP, $i + 1, 0, 0, 1)
        If $iIndex = -1 Then
            $j += 1
            ReDim $aReturn[$j + 1][2]
            $aReturn[0][0] = $j
            $aReturn[$j][0] = $aArray[$i]
        EndIf
        Sleep(1)
    Next
    If Not $aReturn[0][0] Then Return SetError(1)
    Return SetError(0, 0, $aReturn)
EndFunc   ;==>_ProxyUnique


Функция проверки proxy на живучесть

Последний раз редактировалось madmasles, 13-12-2010 в 18:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:36, 13-12-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Часть 2:
читать дальше »
Код: Выделить весь код
Func _GetProxyAll($iNum)
    $iNum = StringFormat('%02d', $iNum)
    Local $sURL = 'http://nntime.com/proxy-list-' & $iNum & '.htm'
    Local $sSource, $aProxy, $aTempPort
    Dim $aPort[10][2]
    $sSource = _INetGetSource($sURL)
    If Not $sSource Then Return SetError(1)
    $aTempPort = StringRegExp($sSource, '([a-z]=\d)', 3)
    If UBound($aTempPort) <> 10 Then Return SetError(1)
    For $i = 0 To 9
        $aPort[$i][0] = '+' & StringLeft($aTempPort[$i], 1)
        $aPort[$i][1] = StringRight($aTempPort[$i], 1)
    Next
    $aProxy = StringRegExp($sSource, '\>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*?)\Q)</script>\E', 3)
    If @error Then Return SetError(1)
    For $i = 0 To UBound($aProxy) - 1
        $aProxy[$i] = StringRegExpReplace($aProxy[$i], _
                '^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?\:\"(.*?)$', '\1:\2')
        If Not @extended Then Return SetError(1)
        For $w = 0 To 9
            $aProxy[$i] = StringReplace($aProxy[$i], $aPort[$w][0], $aPort[$w][1])
        Next
        If Not StringRegExp($aProxy[$i], '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{2,5})', 0) _
                Then Return SetError(1)
    Next
    Return SetError(0, 0, $aProxy)
EndFunc   ;==>_GetProxyAll

Func _GetNumberPagesAll()
    If Not Ping('nntime.com') Then Return SetError(1)
    Local $sURL = 'http://nntime.com/'
    Local $sSource, $iNumber
    $sSource = _INetGetSource($sURL)
    If Not $sSource Then Return SetError(1)
    $iNumber = StringRegExpReplace($sSource, _
            '(?s).*?\Qhtm">\E(\d+)\Q</a> <a href="proxy-list-02.htm">\E.*', '\1')
    If @extended Then
        $iNumber = Number($iNumber)
        Return SetError(0, 0, $iNumber)
    Else
        Return SetError(1)
    EndIf
EndFunc   ;==>_GetNumberPagesAll

Func _ProxyCheck($sProxyPort, $iTimeout = 30)
    Local $sIP, $iPort, $socket, $command, $timeout, $resp
    If Not Ping('zerg.helllabs.net') Then Return SetError(1)
    If Not StringRegExp($sProxyPort, '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{2,5})', 0) _
            Then Return SetError(1)
    $sIP = StringRegExpReplace($sProxyPort, '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\:?.*', '\1')
    $iPort = Number(StringRegExpReplace($sProxyPort, '.*?\:(\d{2,4})', '\1'))
    $socket = TCPConnect($sIP, $iPort)
    If $socket = -1 Then
        Return SetError(1)
    Else
        $command = "GET http://zerg.helllabs.net/cgi-bin/textenv.pl HTTP/1.1" & @CRLF
        $command &= "Host: zerg.helllabs.net" & @CRLF
        $command &= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" & @CRLF
        $command &= "Connection: close" & @CRLF
        $command &= "" & @CRLF
        TCPSend($socket, $command)
        $timeout = TimerInit()
        While 1
            $resp = TCPRecv($socket, 5000)
            If $resp <> "" Then
                $timeout = TimerDiff($timeout)
                ExitLoop
            EndIf
            If TimerDiff($timeout) > $iTimeout * 1000 Then
                Return SetError(2)
            EndIf
            Sleep(1)
        WEnd
    EndIf
    Return SetError(0, $timeout, $resp)
EndFunc   ;==>_ProxyCheck

Пришлось разбить скрипт на 2 части, иначе ругается, что символов слишком много.

Последний раз редактировалось madmasles, 13-12-2010 в 18:54.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:39, 13-12-2010 | #3


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


madmasles, просто шикарный скрипт! Мне такой не написать, я и половины использованных операторов не знаю Теперь неделю сидеть вникать, что и как тут работает, чтобы адаптировать под свои нужды. А то проверка 2к прокси со ста страниц занимает пол дня
Спасибо. Вещь получилась архи полезная.

Отправлено: 16:58, 15-12-2010 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Выгрузка прокси с сайта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - Долгая выгрузка Windows XP aleush Microsoft Windows 2000/XP 4 07-01-2010 15:54
выгрузка по рабочим станциям euro8 Microsoft Windows NT/2000/2003 1 07-12-2009 12:14
выгрузка данных о пользователях skipperTT Microsoft Windows NT/2000/2003 1 29-11-2007 08:26
Самопроизвольная выгрузка процесса EXPLORE tommy96 Microsoft Windows 2000/XP 8 16-01-2006 22:49
VBA - Выгрузка в тхт из VBA Dron Программирование и базы данных 2 29-05-2003 11:42




 
Переход