Парсинг выдачи яндеса

MD
На сайте с 30.07.2013
Offline
0
1036

Добрый день, уважаемые форумчане. Есть у меня одна проблема, из-за которой мне уже по ночам снится капча яндекса. Поставили мне задачу сделать парсинг поисковой выдачи по определенному сайту. Решил я использовать для этого антигейт для разгадывания очень быстро появляющейся капчи. И вот уже 3-й день бьюсь над одной проблемой - Яндекс упорно не хочет принимать разгаданные символы капчи и постоянно выдает мне ответ вида HTTP/1.1 404 Not found Transfer-Encoding: chunked. Хотя я вроде все проверил, по форумам полазил, все запросы и куки яндексу в момент отправки символов капчи посылаю. Вот кусок кода, которые за это отвечает. Помогите плс, чем можете:)


private function captcha_antigate($page, $ccp, $url, $cookie)
{
//sleep(20);
$n = preg_match_all("#<input type=\"hidden\" name=\"key\" value=\"(.*?)\">#", $page, $matches);
$key = $matches[1][0];
$n = preg_match_all("#<input type=\"hidden\" name=\"retpath\" value=\"(.*?)\">#", $page, $matches);
$retpath = $matches[1][0];
$n = preg_match_all("#<img src=\"(.*?)\" class=\"b-captcha__image\">#", $page, $matches);
$captcha = file_get_contents($matches[1][0]);
file_put_contents('ya_cap.gif', $captcha);
$text = recognize("ya_cap.gif","afbe3fe8dc7a1e8818e5e191de0077ef", false, "antigate.com");
$retpath=urlencode("http://yandex.ru");
curl_setopt($ccp, CURLOPT_URL, "http://yandex.ru/checkcaptcha?key=$key&retpath=$retpath&rep=$text");
//echo "http://yandex.ru/checkcaptcha?key=$key&retpath=$retpath&rep=$text";
//die();
curl_setopt($ch, CURLOPT_COOKIE, str_replace(";", "", $cookie));
file_put_contents("cookie.txt", str_replace(";", "", $cookie));
echo curl_exec($ccp);
}
private function execute_query()
{
$this->query_mask = str_replace("#TEXT#", $this->text, $this->query_mask);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 240);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_URL, $this->query_mask);
$result_main = curl_exec($ch);
//echo $result_main;
//проблема с капчей, нужно перезапросить страницу
if(strstr($result_main, "showcaptcha")){
$n = preg_match_all("#spravka=(.*?);#", $result_main, $matches);
$n = preg_match_all("#retpath=(.*?);#", $result_main, $matches1);
$result_main = curl_exec($ch);
$this->captcha_antigate($result_main, $ch, $this->query_mask, $matches[0][0]);
}
if(preg_match_all("#".SEO_YANDEX_TITLE_MASK."#i", $result_main, $matches)){
$result_p = array();
foreach($matches[0] as $match){
if(strstr($match, "www.metagames.ru")){
if(preg_match("#".SEO_YANDEX_ITEM_NUMBER_MASK."#i", $match, $matches_num)){
if(preg_match("#".SEO_YANDEX_LINK_MASK."#i", $match, $matches_link)){
preg_match("#href=\"(.*?)\"#i", $matches_link[0], $matches_link_only);
$result_p[strip_tags($matches_num[0])] = $matches_link_only[1];
}
}
}
}
return key($result_p);
}
return false;
}
R9
На сайте с 14.03.2011
Offline
18
#1

свяжитесь со мной по скайпу iwebrothers, может вместе найдем решение.

Спасибо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий