Приветствую всех. Я хочу спарсить поисковую выдачу по разным фразам в яндексе, но вот только яндекс все не хочет поверить, что я человек и требует от скрипта капчу. Использую curl. Куки включены. Немного поэкспериментировав я понял, что яндексу важна кука "spravka". Если ее удалить, то появится капча при следующем запросе. Пробовал вручную записывать этот параметр в куку, но все равно яндекс не пускает меня. Про яндекс XML в курсе, но мне это не подходит. Подскажете куда копать?
Не подходит, нужно легкое решение. Проблема частично решена. Если некоторое время с IP не поступают запросы, то капча пропадает. Остается выяснить как часто можно делать запросы, чтобы она не появлялась.
Разобрался частично. Яндексу важны вот эти две куки: Session_id и fuid01. Если их вручную подменить, то запросы отлично проходят.
Исходный код передачи капчи. Вот что яндекс мне выдает Spoiler: Страница с капчей <!DOCTYPE HTML><html class="i-ua_js_no i-ua_css_standard"><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Ой!</title><script>;(function(d,e,c,r,n,w,v,f){e=d.documentElement;c="className";r="replace";n="createElementNS";f="firstChild";w="http://www.w3.org/2000/svg";e[c]+=" i-ua_svg_"+(!!d[n]&&!!d[n](w,"svg").createSVGRect?"yes":"no");v=d.createElement("div");v.innerHTML="<svg/>";e[c]+=" i-ua_inlinesvg_"+((v[f]&&v[f].namespaceURI)==w?"yes":"no");})(document);;(function(d,e,c,r,n,w,v,f){e=d.documentElement;c="className";r="replace";n="createElementNS";f="firstChild";w="http://www.w3.org/2000/svg";e[c]+=!!d[n]&&!!d[n](w,"svg").createSVGRect?" i-ua_svg_yes":" i-ua_svg_no";v=d.createElement("div");v.innerHTML="<svg/>";e[c]+=(v[f]&&v[f].namespaceURI)==w?" i-ua_inlinesvg_yes":" i-ua_inlinesvg_no";})(document);;(function(d,e,c,r){e=d.documentElement;c="className";r="replace";e[c]=e[c][r]("i-ua_js_no","i-ua_js_yes");if(d.compatMode!="CSS1Compat")e[c]=e[c][r]("i-ua_css_standart","i-ua_css_quirks")})(document);</script><!--[if gt IE 9]><!--><link rel="stylesheet" href="/captcha/_common.css"/><!--<![endif]--><!--[if IE 6]><link rel="stylesheet" href="/captcha/_common.ie6.css"/><![endif]--><!--[if IE 7]><link rel="stylesheet" href="/captcha/_common.ie7.css"/><![endif]--><!--[if IE 8]><link rel="stylesheet" href="/captcha/_common.ie8.css"/><![endif]--><!--[if IE 9]><link rel="stylesheet" href="/captcha/_common.ie9.css"/><![endif]--></head><body class="b-page i-ua i-ua_interaction_yes b-page__body i-global i-bem" data-bem="{"b-page":{},"i-ua":{},"i-global":{"lang":"ru","tld":"ru","content-region":"ru","click-host":"//clck.yandex.ru","passport-host":"https://passport.yandex.ru","pass-host":"//pass.yandex.ru","social-host":"//social.yandex.ru","export-host":"//export.yandex.ru","lego-static-host":"//yastatic.net/lego/2.10-152"}}"><div class="i-expander__gap"></div><div class="i-expander__content"><div class="island island_type_fly"><div class="badge"><div class="logo logo_lang_ru"><a class="logo__link" href="//www.yandex.ru"><img class="logo__image" alt="Яндекс" src="//yastatic.net/lego/_/La6qi18Z8LwgnZdsAr1qy1GwCwo.gif"/></a></div></div><div class="content"><h1 class="title">ой...</h1><div class="text"> <p>Нам очень жаль, но запросы, поступившие с вашего IP-адреса, похожи на автоматические. По этой причине мы вынуждены временно заблокировать доступ к поиску.</p> <p>Чтобы продолжить поиск, пожалуйста, введите символы с картинки в поле ввода и нажмите «Отправить».</p> <p class="b-hidden"><i class="icon icon_alert_yes"></i> <b>В вашем браузере отключены файлы cookies</b>. Яндекс не сможет запомнить вас и правильно идентифицировать в дальнейшем. Чтобы включить cookies, воспользуйтесь советами на <a class="link" target="_blank" href="//help.yandex.ru/common/?id=1111120">странице нашей Помощи</a>. </p></div><div class="form form_state_image form_error_no form_audio_yes i-bem" data-bem="{"form":{"flash":"/captcha/soundmanager2.swf","sound":"http://yandex.ru/captcha/voice?aHR0...1802ee056cce_f76a7aaa2b82c86dc20ece62b50b1a4a","soundIntro":"http://yandex.ru/captcha/voiceintro...1802ee056cce_435d20195cfb0c6c65d902fdd74e23e5","buttonPlay":"Произнести","buttonPlaying":"Воспроизводится"}}"><form class="form__inner" method="get" action="/checkcaptcha"><input class="form__key" type="hidden" name="key" value="c30Qe9KLQCA1djVw5uL79rjueABjbNbb_0/1435510223/1733a1a79785261da10c1802ee056cce_aa329af11493ee2d19a38e4cb426a23e"/><input class="form__retpath" type="hidden" name="retpath" value="http://yandex.ru/search?text=скачать+minecraft&p=1_68c3d22db217fcb7ad97633d12eb102c"/><div class="form__trigger" title="Изображение ↔ Звук" role="button" tabindex="0" aria-label="Изображение ↔ Звук"></div><span class="link form__refresh" title="Показать другую картинку" aria-label="Показать другую картинку" role="button" tabindex="0"></span><img class="image form__captcha" style="background: #cfcfcf;" src="http://yandex.ru/captchaimg?aHR0cDo...1802ee056cce_9423ea76a1752a34b8183ad5074a34cf" alt=""/><div class="form__audio"><button class="button button_size_m button_type_play button_theme_normal form__play i-bem" role="button" type="button" data-bem="{"button":{}}"><span class="button__text">Произнести</span></button></div><div class="form__arrow">→</div><span class="input input_size_m input_clear_no input_keyboard_yes input_theme_normal form__input i-bem" data-bem="{"input":{"autoFocus":true,"live":false}}"><label class="input__hint input__hint_visibility_visible" id="hintuniq14183119996922" for="uniq14183119996922" aria-hidden="true">символы слева</label><span class="input__box"><input class="input__control i-bem" id="rep" name="rep" data-bem="{"input__control":{}}"/></span><span class="b-keyboard-loader b-keyboard-loader_type_search b-keyboard-loader_lang_ru i-bem" data-bem="{"b-keyboard-loader":{"for":"#rep"}}"><img class="image b-keyboard-loader__keyboard" src="//yastatic.net/lego/_/La6qi18Z8LwgnZdsAr1qy1GwCwo.gif" alt=""/></span></span><button class="button button_size_m button_side_right button_theme_normal form__submit i-bem" role="button" type="submit" data-bem="{"button":{}}"><span class="button__text">Отправить</span></button></form></div></div><div class="why"><h2 class="why__title">Почему так случилось?</h2> <p>Возможно, автоматические запросы принадлежат не вам, а другому пользователю, выходящему в сеть с одного с вами IP-адреса. Вам необходимо один раз ввести символы в форму, после чего мы запомним вас и сможем отличать от других пользователей, выходящих с данного IP. В этом случае страница с капчей не будет беспокоить вас довольно долго.</p> <p>Возможно, в вашем браузере установлены дополнения, которые могут задавать автоматические запросы к поиску. В этом случае рекомендуем вам отключить их.</p> <p>Также возможно, что ваш компьютер заражен вирусной программой, использующей его для сбора информации. Может быть, вам стоит проверить систему на наличие вирусов, например, антивирусной утилитой <a class="link" target="_blank" href="http://www.freedrweb.com/?lng=ru">CureIt</a> от «Dr.Web».</p> <p>Если у вас возникли проблемы или вы хотите задать вопрос нашей службе поддержки, пожалуйста, воспользуйтесь <a class="link" href="//feedback2.yandex.ru/captcha/">формой обратной связи</a>. </p> </div><div class="note"><p> Если автоматические запросы действительно поступают с вашего компьютера, и вы об этом знаете (например, вам по роду деятельности необходимо отправлять Яндексу подобные запросы), рекомендуем воспользоваться специально разработанным для этих целей сервисом <a class="link" href="//xml.yandex.ru">Яндекс.XML</a>. </p></div></div></div><div class="popup popup_theme_ffffff popup_color_error popup_autoclosable_yes popup_adaptive_yes popup_animate_yes"><div class="popup__under"></div><i class="popup__tail"></i><div class="popup__content">Неверно, попробуйте ещё раз.</div></div><script src="//yastatic.net/jquery/1.8.3/jquery.min.js"></script><script src="/captcha/soundmanager2.min.js"></script><script src="/captcha/_common.ru.js"></script> <!-- Yandex.Metrika counter --><script type="text/javascript">(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter10630330 = new Ya.Metrika({id:10630330, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true, ut:"noindex"}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/10630330?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div></noscript><!-- /Yandex.Metrika counter --> </body></html> Отсюда беру две переменные и сам текст с капчей: PHP: $key = 'c30Qe9KLQCA1djVw5uL79rjueABjbNbb_0/1435510223/1733a1a79785261da10c1802ee056cce_aa329af11493ee2d19a38e4cb426a23e';$retpath = 'http://yandex.ru/search?text=%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+minecraft&p=1_68c3d22db217fcb7ad97633d12eb102c';$rep = 'танцзал'; И пытаюсь через CURL отдать капчу : PHP: $curl = curl_init();curl_setopt($curl, CURLOPT_COOKIESESSION, true);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_COOKIEJAR, $HOMEDIR.'/cookie/cookies_yandex.txt');curl_setopt($curl, CURLOPT_COOKIEFILE, $HOMEDIR.'/cookie/cookies_yandex.txt');curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36');curl_setopt($curl, CURLOPT_URL, 'http://yandex.ru/checkcaptcha?key='.$key.'&rep='.$rep.'&retpath='.$retpath);$html = curl_exec($curl); В итоге яндекс говорит, что такой страницы нет. В чем проблема?
Куки точно работают? и возможно реферер проверяется А еще не плохо было бы проверить именно снифером куда отсылается разгаданная капча. В коде может быть одно а на деле другое, замена на лету может быть при помощи JS
Да, куки точно работают. Уже разобрался. Там надо было вот это с переменными сделать: PHP: $retpath = html_entity_decode($retpath);$retpath = urlencode($retpath);$key = urlencode($key); и все сразу заработало. По поводу проверки куда шлются запросы, я это первым делом проверял через firebug. Уже сталкивался с подобными загадками от яндекса, когда вордстат парсил