Php + curl парсинг выдачи гугла

Ваша ошибка в формировании GET запроса.
Незнаю где Для просмотра ссылки Войди или Зарегистрируйся нашол там рекапчу..... Её там нет.
Сейчас опишу подробнее..
 
Чтобы продолжить, введите указанные ниже символы:<br><br>
<img src="/sorry/image?id=7620662892341607861&amp;hl=ru" border="1" alt="Включите отображение изображений">
<br><br>
<form action="Captcha" method="get"><input type="hidden" name="continue" value="Для просмотра ссылки Войди или Зарегистрируйся"><input type="hidden" name="id" value="7620662892341607861"><input type="text" name="captcha" value="" id="captcha" size="12" style="font-size:16px; padding:3px 0 3px 5px; margin-left:0px;"><input type="submit" name="submit" value="Отправить" style="font-size:18px; padding:4px 0;"><br><br><br></form>
.....


Как видете исходя из формы капчу нужно слать на Captcha соответственно на Для просмотра ссылки Войди или ЗарегистрируйсяCaptcha
В итоге собераем все параметры и получаем что функция должна вернуть такой адрес.
PHP:
function google_captcha ($id, $link, $responce) {
$result =  'http://www.google.ru/Captcha?continue='.$link.'&id='.$id.'&captcha='.$responce.'&submit=Submit';
return $result;
}
Пробуйте изменив функцию на ту что я дал выше.
Я не пробовал - сделал вывод на исходнике страницы онтибота потому как смог добиться её только после пногопоточного запроса к гуглу в колличестве более 3к но в браузере цука так и не появилась :D
 
  • Нравится
Реакции: O Z
  • Заблокирован
  • #23
O Z ты выложил не весь код и хочешь чтобы тебе каким то образом помогли,я так понял по первому сообщению что ты допустил ошибку в плане обновления капчи,то что не передавал куки сессия открытая на страницы должна быть передана при загрузки капчи,иначе гугл посчитает что это новое обращение и создаст новую капчу, элементарный код получения рекапчи я привёл,думаю раз прогер то должен понять. В общем если хочешь чтобы тебе помогли выкладывай код полностью,а тот тут у тебя объекты смотрю, а в представленном коде не чего подобного не объявленно. В общем выложи всё по порядку и попробуй детально описать свою проблему.
Не глядя на весь код могу сказать что скорее всего вы либо не передали страницу гугл странице с которой пришли
(Вот curl_setopt($ch, CURLOPT_REFERER,$url); добавьте это поле при получении капчи со странице гугл,в поле $url нужно вставить страницу на которой капча эта выводится.)
,либо не верно описали сам парсер ссылки,возможно формирование запроса не верен в общем много чего можно сказать и предположить, поэтому просто выложете весь свой код и я вам его допишу,бесплатно!(я "дедудшка мороз" из страны "поле чудес" всё бесплатно делаю xD)
 
  • Заблокирован
  • #24
.
 
dexgun, код я был выложил в предыдущем сообщении, с твоими функциями.
Вот еще раз, без $this->.

Выдает ошибки:
1. $url_js[1] && $url_pic[1] = Undefined offset: 1. (регулярки ничего не находят.)
2. An error occurred: Input error: c: Error parsing captcha challenge value

Еще вопрос по curl_setopt($ch, CURLOPT_REFERER,$url);, а какой там url?

Буду очень благодарен, так как уже около недели потратил.

PHP:
    function get_page ($link, $flag = false) {
        if ($flag === true) @unlink('tmp/cookie.txt');
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $link);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Chrome/16.0.912.75');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'tmp/cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'tmp/cookie.txt');
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
 
    function google_page ($page, $link, $key) {
        do {
            $block = explode('id="res"', $page);
            if (empty($block[1])) {
                $urlRecaptchaImage =getImageNameRecaptcha($page);
                $captchaCode = getRecaptcha($urlRecaptchaImage);
                $file = save_google_img($captchaCode);
                do {
                    $responce = recognize($file, $key); // Функция для antigate, нужно передавать путь к сохраненному изображению на сервере и ключ ихний
                    preg_match_all('/error|waiting|not\sready|timelimit/', $responce, $matches);
                } while (!empty($matches[0][0]));
                echo $responce; exit; // Ответ от антигейта
            }
        } while (empty($block[1]));
        $result = $block[1];
        return $result;
    }
 
    function getImageNameRecaptcha($result) {
        preg_match( |src="(http://www.google.com/recaptcha/api/challenge.*?)"|is' , $result, $url_js);
        $result = get_page($url_js[1]);
        preg_match( '|challenge : \'(.*?)\'|is' , $result, $url_pic);
        return $url_pic[1];
    }
 
    function getRecaptcha($url_pic) {
        $picture = get_page("http://api.recaptcha.net/image?c=".$url_pic);
        return $picture;
    }
 
    function save_google_img ($data) {
        $name = 'tmp/'. time() .'.png';
        file_put_contents($name, $data);
        return $name;
    }
 
$link = "http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=$word&num=$count&hl=ua&start=0"; // Ссылка для поиска
$data = get_page($link, true); // Запрос
$result['google_ua'] = google_page($data, $link, $key); // Проверка на капчу, ее решение и получение выдачи гугла

to Inviseble_Demon:
function google_captcha ($id, $link, $responce) { $result = 'Для просмотра ссылки Войди или Зарегистрируйся return $result; }
Спасибо, исправлю.
А имеет ли значение google.ru || google.com || google.com.ua ?

Не идет, возвращает 404:
404.
That’s an error.
The requested URL /Captcha?continue=Для просмотра ссылки Войди или Зарегистрируйся not found on this server.
That’s all we know.
 
Попробуйте так:
PHP:
function google_captcha ($id, $link, $responce) {
$result =  'http://www.google.ru/sorry/Captcha?continue='.$link.'&id='.$id.'&captcha='.$responce.'&submit=Submit';
return $result;
}

Для просмотра ссылки Войди или Зарегистрируйся - замените на тот который используете.
 
  • Заблокирован
  • #28
Оки,сегодня постраюсь решить вашу проблему, ближе к вечеру или ночью можете ожидать готового решения!
 
  • Заблокирован
  • #29
Вот банальный пример получения выдачи "10 страниц" с гугл,по запросу "аниме", незнаю где вы там капчу вообще видили,я лично искал но не нашёл :D ,но думаю я всё равно помог,если что пишите,помогу вам решить проблему и тогда наконец-то можно будет покончить с этим безобразием :smmne:
PHP:
<?php
$ua = 'opera';
$cookieFile = str_replace('\\','/', getcwd()).'/tmp/cookie.txt';
$word = "аниме";
$count = "10";

$link = "http://www.google.ru/search?client=opera&rls=ru&q=".rawurlencode($word)."&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest";

function getPage($url,$cookieFile) 
{
global $ua,$cookieFile,$word,$count;
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_USERAGENT, $ua); 
curl_setopt($ch, CURLOPT_TIMEOUT,50); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookieFile);
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookieFile);
$answer=curl_exec($ch);
return $answer; 
}
$a = getPage($link,$cookieFile);

echo $a;
?>
 
  • Заблокирован
  • #30
Назад
Сверху