Что нового

[решено] скрипт для сбора данных сайта с использованием API antigate.com

Zhavner

Новичок
Сообщения
9
Репутация
0
Необходимо выполнить поисковые запросы на сайте ___, подставить распознаную капчу и сохранить на диск результаты выдачи.
Алгоритм.
Поисковые значения находятся в текстовом файле, который скрипт проходит построчно. (Нужно предусмотреть запись последней прочитанной строки, чтобы в случае завершения работы скрипта, он продолжил работу со строки, на которой остановился, а не начинал сначала).
Скрипт открывает сайт, получает ссылку капчи и сохраняет на диск.
Используя API antigate.com, отправляет капчу на распознавание, дожидается ответа, и отправляет поисковый запрос.
Если капча неправильная, нужно пожаловаться на распознавание и повторить итерацию. Если капча прошла, сохранить результат запроса в html и вложения на странице в папку. Выходная папка будет названа по имени поискового значения.
Скрипт не имеет gui окон, работает консольно, ведет лог работы в текстовый файл, примерно:
[поисковое значение] - результат.

Как пример, прикладываю скрипт, делающий один запрос с ручным распознаванием капчи (antigate не прикручен).
Для реализации можно использовать antigate.au3
Срок исполнения: день-два
Оплата: 500р

Код:
#include <Array.au3>

$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', 'http://XXX/', False)
$oHTTP.Send('')
$oHTTP.WaitForResponse
$sHTML = $oHTTP.GetAllResponseHeaders
$GetAllResponseHeaders = $oHTTP.GetAllResponseHeaders

If StringInStr($GetAllResponseHeaders, "Set-Cookie:") Then
	$SetCookie = $oHTTP.GetResponseHeader("Set-Cookie")
	$Cookie = _SetCookieParseV2($GetAllResponseHeaders)
EndIf

$sHTML = $oHTTP.ResponseText

$array = StringRegExp($sHTML, '<img src="\/static\/captcha.html\?a=(.*?)"', 3)
For $i = 0 To UBound($array) - 1
	$sCapToken = $array[$i]
Next

$sCapUrl = 'http://XXX/static/captcha.html?a=' & $sCapToken

InetGet($sCapUrl, @ScriptDir & '\qwe.gif')

$sCapNum = InputBox('Введи капчу', '?')

$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('POST', 'http://XXX/', False)
$oHTTP.SetRequestHeader("Cookie", $Cookie)
$oHTTP.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0')
$oHTTP.SetRequestHeader('Accept', "application/json, text/javascript, */*; q=0.01")
$oHTTP.SetRequestHeader('Accept-Language', "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
$oHTTP.SetRequestHeader('Accept-Encoding', "gzip, deflate")
$oHTTP.SetRequestHeader('Content-Type', "application/x-www-form-urlencoded; charset=UTF-8")
$oHTTP.SetRequestHeader('X-Requested-With', "XMLHttpRequest")
$oHTTP.SetRequestHeader('Referer', "http://XXX/")
$oHTTP.Send('XXX&captcha=' & $sCapNum & '&captchaToken=' & $sCapToken)
$oHTTP.WaitForResponse
$sHTML = $oHTTP.ResponseText
Local $aArray = StringRegExp($sHTML, '"T":"(.*?)"', 3)
For $i = 0 To UBound($aArray) - 1
	$tDown = $aArray[$i]
Next
$sUrl = "http://XXX/download/" & $tDown
ConsoleWrite($sUrl & @CRLF)
InetGet($sUrl, @ScriptDir & '\qwe.pdf')

Func _SetCookieParseV2($AllResponseHeaders)
	; function copy rus forum
	$sCOOKIES = ""
	$aResponseHeaders = StringSplit($AllResponseHeaders, @CRLF)
	For $i = 1 To $aResponseHeaders[0]
		If StringLeft($aResponseHeaders[$i], 10) = 'Set-Cookie' Then
			$iPozSim = StringInStr($aResponseHeaders[$i], ';')
			$sCOOKIES &= StringMid($aResponseHeaders[$i], 13, $iPozSim - 13) & '; '
		EndIf
	Next
	$sCOOKIES = StringMid($sCOOKIES, 1, StringLen($sCOOKIES) - 2)
	Return $sCOOKIES
EndFunc   ;==>_SetCookieParseV2
 

Вложения

  • antigate.au3
    17.4 КБ · Просмотры: 14
Верх