Продолжаю пробовать парсить яндекс... Продолжаю это делать неудачно. Причем понятно что как таковое меня банит яндекс не за то что делаю много запросов а просто не верит то я не робот... Установил себе http снифер врооде заголовки все посылаю как иброузер точнее копирнул немного оттуда... Вот что посылаю Код (Text): curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch,CURLOPT_MAXREDIRS,1); curl_setopt($ch,CURLOPT_COOKIEJAR,$root.'cookie.txt'); curl_setopt($ch,CURLOPT_COOKIEFILE,$root.'cookie.txt'); curl_setopt($ch,CURLOPT_HTTPHEADER,array( 'Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3', 'Connection:keep-alive', ));
Re: Яндекс...... ты как начнешь удачно парсить, не забудь выложить то, как ты этого добился, ибо тема интересна многим (ну мне во всяком случае точно)
Re: Яндекс...... Та оно вроде просвет был думал наконец а потом сдулось все)... И через прокси это делаю Код (Text): if(!empty($count)){ curl_setopt($ch , CURLOPT_PROXY , $proxy[$y][0]); if(!empty($proxy[$y][1])) curl_setopt($ch , CURLOPT_PROXYPORT , $proxy[$y][1]); print($proxy[$y][0] . ':' . $proxy[$y][1].'<br/>'); $y++; if($y>=$count) $y=0; } Вообще если реально кому то это интересно и непротив тоже потестить попробовать или мне указать на ошибки вот что я пока написал) Добавлено спустя 9 минут 40 секунд: Код (Text): <?php set_time_limit(0); $root=$_SERVER['DOCUMENT_ROOT'] . '/'; //Название файла и путь со списком проверенных прокси серверов ip:port $file_proxy=$root . 'proxy_ok.txt'; //урл для старта $url_start=array('http://yandex.ru/yandsearch?text=scs&lr=20272'); $url_find='http://yandex.ru/'; //$ya - в голову мысль клюнла пробовал этот параметр не важен $ya='http://www.yandex.ru/'; header('Content-Type: text/html; charset=UTF-8'); //Все подряд чтоб не запускали случайно $access=false; if(!empty($_GET['mn']) && $_GET['mn']=='a') $access=true; if($access==false) die('У вас нет доступа'); if(!extension_loaded('curl')) die('Для работы скрипта необходима библиотека curl'); $proxy=file_get_contents($file_proxy); if(!empty($proxy)){ $proxy=explode("\r\n",$proxy); //Создаем массив прокси и филтруем чтобы были только уникальные на всякий случай вдруг в файле есть одинаковые $proxy=array_keys(array_count_values($proxy)); foreach($proxy as $key=>$val) $proxy[$key]=explode(':' , $val); } //Парсим аштм возвращенный этой библиотекой require($root . 'simple_html_dom.php'); $ch=curl_init(); if($ch){ $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_AUTOREFERER, true); curl_setopt($ch , CURLOPT_RETURNTRANSFER , true); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch,CURLOPT_MAXREDIRS,1); curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_COOKIEJAR,$root.'cookie.txt'); curl_setopt($ch,CURLOPT_COOKIEFILE,$root.'cookie.txt'); curl_setopt($ch,CURLOPT_HTTPHEADER , $header); //Думал сделать если нет прокси серверов подобие аудитора это если капча была if(!empty($_GET['captcha'])){ ответ сами отправляем $captch=$_GET['captcha']; $key=$_GET['key']; $ret=$_GET['ret']; $u='http://yandex.ru/checkcaptcha?captcha=' . urlencode($captch) . '&key=' . urlencode($key) . '&retpath=' . urlencode($ret); print('<br/>'.$u.'<br/>'); curl_setopt($ch , CURLOPT_URL , $u); $result=curl_exec($ch); print($result); } // Это вот если есть прокси у нас $count=null; if(!empty($proxy) && is_array($proxy)) $count=count($proxy); $y=0; for($i=0;count($url_start)>$i;$i++){ // Прокси if(!empty($count)){ curl_setopt($ch , CURLOPT_PROXY , $proxy[$y][0]); if(!empty($proxy[$y][1])) curl_setopt($ch , CURLOPT_PROXYPORT , $proxy[$y][1]); print($proxy[$y][0] . ':' . $proxy[$y][1].'<br/>'); $y++; if($y>=$count) $y=0; } //Сначала один запрос к яндексу //Была мысль что обязательно надо к главной странице яндекса подключиться сохранить там все куки и тока следующий запрос какой надо //В браузерах куки просто хранятсч поэтому на главную нам и не надо /***************************** curl_setopt($ch , CURLOPT_URL , $ya); $result=curl_exec($ch); $http_code=curl_getinfo($ch , CURLINFO_HTTP_CODE); if($http_code==200){ $cookie=''; list($head,)=explode("\r\n\r\n" , $result , 2); preg_match_all('/set-cookie: (.*)/i' , $head , $c); if(!empty($c[1])){ foreach($c[1] as $val) $cookie.=$val . '; '; $cookie=substr($cookie , 0 , -2); curl_setopt($ch , CURLOPT_COOKIE , $cookie); } } ***********************/ curl_setopt($ch , CURLOPT_URL , $url_start[$i]); $result=curl_exec($ch); $dom=str_get_html($result); $info=curl_getinfo($ch); $http_code=$info['http_code']; $http=explode("\r\n" , $result , 2); //Проверка был ли редирект if(strpos($http[0] , '302')!==false){ $img=$dom->find('img.b-captcha__image',0); $rk=$dom->find('[name=key],[name=retpath]'); $ret=$rk[1]->value; $key=$rk[0]->value; if(!empty($img)){ $captcha=$img->outertext; } if(!empty($captcha)){ print <<<HERE <h3>Ой-Ой Капча! введем код и продолжим дальше</h3> $captcha<br /><br /> <form action="" method="get"> <input name="mn" value="a" type="hidden"/> <input type="hidden" name="key" value="$key"> <input type="hidden" name="retpath" value="$ret"> <input name="captcha" /><br /><br /> <input type="submit" /> </form> HERE; } exit; } if($http_code==200){ $url_ret=get_links($result); if(!empty($url_ret)){ foreach($url_ret as $val){ if(!in_array($val , $url_start)) $url_start[]=$val; } } }/* elseif($http_code==302){ list($head,)=explode("\r\n\r\n" , $result); preg_match('/location: (.*)/i' , $head , $location); $location=$location[1]; print($location); curl_setopt($ch , CURLOPT_URL , $location); $result=curl_exec($ch); print('<br/><br/>'. curl_error($ch) . '==' . curl_errno($ch) .'<br/><br/>'); print_r($info); print($result); exit; }*/ else print('Запрос совершить не удалось ' . $http_code . '<br/>'); exit; } curl_close($ch); } function get_links($content){ global $url_find; $dom=str_get_html($content); $url=array(); foreach($dom->find('.b-serp-item__links-link,.b-pager__pages a') as $el){ if(strpos($el->href , 'http://')===false){ if(substr($el->href,0,1)=='/') $el->href=substr($url_find , 0 , -1) . $el->href; else $el->href=$url_find . $el->href; } $url[]=$el->href; } return $url; } ?> Добавлено спустя 5 минут 11 секунд: Да скрипт пока пишется для первого запроса ибо он один то не совершает а логика такая... В начале задаем в массиве $url_start урл яндекса с которого начинать... Он по нему пройдется вернет аштмл и если все норм дергаем ссылки какие нам надо для того функция get_links В ней надо настраивать под себя парсер я то кэш хочу подергать... Эта функция вернет массив ссылок всех нужных и их добавляем в массив $url_start перед этим проверим а нет ли там их уже... и так странички лазаем добавляем ссылки пока все не пройдем поэтому в цикле каждый раз проверяется размер этого массива Добавлено спустя 1 минуту 49 секунд: Не пишу ООП скрипт пока простой... Не стараюсь написать коротко ибо тесты ... Поэтому важно советы плана не а вот тут можно эту переменную уюрать а как яндекс обмануть Добавлено спустя 2 минуты 1 секунду: Да про сервис яндекс.xml знаю но там всего 1000 запросов.. Плюс потом захочу выдачу или еще что парсить 1000 запросов будет мало плюс подтверждать своим телефоном нехочется...
Re: Яндекс...... Продвинулся далече... Суть уловил банит из за того что не даю ему куки нужные при этом. .. Написал далее функцию брать все куки которые приходит и отправлять назад... Но почему то приходят мне и броузеру разные куки и значит банит.... На уровне сайтаудитора у меня сейчас работает... Яндекс парсю встречается капча ввожу и продолжаю тогда дальше... Но по уму надо порный автомат... Одним словом вот проблема... Яндекс браузеру и скрипту выдает разные куки чего то ему не хватает.. Научиться полуать норм куки тогда заработает прокси как надо.. Так как если с одними и теми же куками по разным айпишникам сразу капча
Re: Яндекс...... насчет каптчи, тут нам помогут наши китайские товарищи, они ее руками вводят по копейки за штуку!
Re: Яндекс...... Ну такой вариант у мен работает ток сам пока ввожу каптчу но это ж не гуд).. Надо понять почему куки броузеру одни скрипту другие каких заголовков или чего не хватает
Re: Яндекс...... Без проблем))... Но заметил что забанил опять яд и пока капча не вводится странно... Могу скинуть что есть но это пока еще промежуточный вариант... В общем вот.. Но с капчей все таки проблем... Эт парсер пишу для кэша яда ну на его основе если щас добить люой парсер всего яда можно написать... Просто линки тогда надо дергать и при двухсотом коде что то свое делать если выдача искать сайт... Важней притвориться щас человеком полностью если ввести куки то у меня страни 18 парсит ну можно задержку в секундаж поставить но рано или поздно будет капча вот первое хотя бы с капчей норм тогда справиться Код (Text): <?php set_time_limit(0); $root=$_SERVER['DOCUMENT_ROOT'] . '/'; //Куки яндекса их вот надо бы из браузера взять строку $cookie='yandexuid=978270201341937323; t=p; yp=1344536485.ygu.1#1342205481.clh.47639; ys=gsync.1341944485; yandex_gid=213; yabs-frequency=/4/0000000000000000/25_U06GEeNS201Ta3hnPVm0rP0uX/; aw=1_teJxiVGBgPu4lxLFi73/Oc15KAh8u/ud8aKskYCHOwMXAwPAfAAAA//8DALFY#CCngA#A#; fuid01=4f55295434a56376.m2tnOcKX7ADaUANsITrkBFzbUm_KvFf3-CQp-i2i9qRdtp60j7o_p0th_eW74QyR-aJ37h4O0j7904nzslsgH88mz10EoxhU-M8MOgWuADPNCQT2fCb6A1I9QEZmimER; spravka=dD0xMzEwNDA0OTc5O2k9MjAzLjE5OC4yMy44Mjt1PTEzMTA0MDQ5Nzk2NTEyMTIxNzk7aD1mMDBiY2YzN2JhZDRlMWMzMGZjNGQ1YjMzNWMxNjJlMg==; __utma=112022668.1039416602.1341946291.1341946291.1341946291.1; __utmb=112022668.0.10.1341946291; __utmc=112022668; __utmz=112022668.1341946291.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'; $cookie_cash='__utma=83042206.811561610.1341934279.1341934279.1341934279.1; __utmc=83042206; __utmz=83042206.1341934279.1.1.utmcsr=ssss.ru|utmccn=(referral)|utmcmd=referral|utmcct=/ya.php'; //Название файла и путь со списком прокси серверов $file_proxy=$root . 'proxy_ok.txt'; $max_queries=5; $url_start=array('http://yandex.ru/yandsearch?text=site%site.ru&lr=11514'); $url_find='http://yandex.ru/'; $ya='http://www.yandex.ru/'; $cache_server='http://hghltd.yandex.net/'; header('Content-Type: text/html; charset=UTF-8'); $access=false; if(!empty($_GET['mn']) && $_GET['mn']=='a') $access=true; if($access==false) die('У вас нет доступа'); if(!extension_loaded('curl')) die('Для работы скрипта необходима библиотека curl'); $proxy=file_get_contents($file_proxy); if(!empty($proxy)){ $proxy=explode("\r\n",$proxy); $proxy=array_keys(array_count_values($proxy)); foreach($proxy as $key=>$val) $proxy[$key]=explode(':' , $val); } require($root . 'simple_html_dom.php'); $ch=curl_init(); if($ch){ $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_AUTOREFERER, true); curl_setopt($ch , CURLOPT_RETURNTRANSFER , true); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0); //curl_setopt($ch,CURLOPT_COOKIEJAR,$root.'cookie.txt'); //curl_setopt($ch,CURLOPT_COOKIEFILE,$root.'cookie.txt'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch,CURLOPT_MAXREDIRS,1); curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_HTTPHEADER , $header); curl_setopt($ch , CURLOPT_COOKIE , $cookie); if(!empty($_GET['captcha'])){ $captch=$_GET['captcha']; $key=$_GET['key']; $ret=$_GET['ret']; $u='http://yandex.ru/checkcaptcha?captcha=' . urlencode($captch) . '&key=' . urlencode($key) . '&retpath=' . urlencode($ret); curl_setopt($ch , CURLOPT_URL , $u); $result=curl_exec($ch); header('Location: домен'); exit; } $count=null; $count_query=0; if(!empty($proxy) && is_array($proxy)) $count=count($proxy); $y=0; for($i=0;count($url_start)>$i;){ if($i==1){ curl_setopt($ch , CURLOPT_COOKIE , ''); curl_setopt($ch , CURLOPT_REFERER , ''); } $count_query++; // Прокси $count=null; if(!empty($count)){ curl_setopt($ch , CURLOPT_PROXY , $proxy[$y][0]); if(!empty($proxy[$y][1])) curl_setopt($ch , CURLOPT_PROXYPORT , $proxy[$y][1]); print($proxy[$y][0] . ':' . $proxy[$y][1].'<br/>'); $y++; if($y>=$count) $y=0; } curl_setopt($ch , CURLOPT_URL , $url_start[$i]); $result=curl_exec($ch); $dom=str_get_html($result); $info=curl_getinfo($ch); $http_code=$info['http_code']; $http=explode("\r\n" , $result , 2); //Проверка был ли редирект 302 на капчу if(strpos($http[0] , '302')!==false){ $img=$dom->find('img.b-captcha__image',0); $rk=$dom->find('[name=key],[name=retpath]'); $ret=$rk[1]->value; $key=$rk[0]->value; if(!empty($img)){ $captcha=$img->outertext; } if(!empty($captcha)){ print <<<HERE <h3>Ой-Ой Капча! введем код и продолжим дальше</h3> $captcha<br /><br /> <form action="" method="get"> <input name="mn" value="a" type="hidden"/> <input type="hidden" name="key" value="$key"> <input type="hidden" name="retpath" value="$ret"> <input name="captcha" /><br /><br /> <input type="submit" /> </form> HERE; } exit; } if($http_code==200){ $count_query=0; /* if($i==0){ $cookie=''; list($head,)=explode("\r\n\r\n" , $result , 2); preg_match_all('/set-cookie: (.*)/i' , $head , $c); if(!empty($c[1])){ foreach($c[1] as $val) $cookie.=$val . '; '; $cookie=substr($cookie , 0 , -2); curl_setopt($ch , CURLOPT_COOKIE , $cookie); } } */ print($result); //Если кэш сервер if(strpos($url_start[$i] , $cache_server)!==false){ list(,$rn)=explode("\r\n\r\n" , $result , 2); file_put_contents($root.'yandex/'.time() . rand() .'.html',$url_start[$i]."\n".$rn); } else{ $url_ret=get_links($dom); if(!empty($url_ret)){ foreach($url_ret as $val){ if(!in_array($val , $url_start)) $url_start[]=$val; } } } $i++; } else print('Запрос совершить не удалось ' . $http_code . '<br/>'); $dom->clear(); unset($dom); if($count_query>=$max_queries){ $count_query; $i++; } } curl_close($ch); } function get_links($dom){ global $url_find; $url=array(); //.b-serp-item__links-saved a,.b-pager__pages a foreach($dom->find('.b-pager__pages a') as $el){ if(strpos($el->href , 'http://')===false){ if(substr($el->href,0,1)=='/') $el->href=substr($url_find , 0 , -1) . $el->href; else $el->href=$url_find . $el->href; }; $url[]=html_entity_decode($el->href); } return $url; } ?>
Re: Яндекс...... хм....ну поехали разбираться Код (Text): if(!empty($_GET['mn']) && $_GET['mn']=='a') $access=true; if($access==false) die('У вас нет доступа'); $_GET['mn'] - откуда должен взяться? proxy_ok.txt - в студию require($root . 'simple_html_dom.php'); - а тут что за файлик?
Re: Яндекс...... А код кинул эт вод код simpli_html_dom.php Добавлено спустя 1 минуту 9 секунд: А просто чтобы кто урл набрал не запустил скрипт) Добавлено спустя 45 минут 40 секунд: Кст капча не вводится из за того что тупо параметр перепутал имя его а так вводится)... Но надо куки добить
Re: Яндекс...... этта, полож обратно!!! ну или в личку кинь файлики. Спасибо! Добавлено спустя 59 минут 48 секунд: да, и колись как ты позицию той или иной ссылки вытаскиваешь! Добавлено спустя 22 минуты 49 секунд: Да, и еще прикольная штука: При поиске отдано предпочтение сайтам из Гонконга чеит он меня за китайца держит?
Re: Яндекс...... Сегодня буду доделывать как и сказал не совсем норм рабочий там надо доработать чуть и кину в лк... да, и колись как ты позицию той или иной ссылки вытаскиваешь! - я его писал не под позиции а под кэш яда а чтобы позиции тащились на функцию обработки менять там к примеру можно это в a_links запихнуть как допишу и позиции покажу ри поиске отдано предпочтение сайтам из Гонконга А это прокксивсе подряд есть россия есть китай сша там все подряд) надо российский ток прокси лист а мне для кэша чтоб вытащить было безразницы
Re: Яндекс...... а я ваще без прокси запускал (тыж их удалил, я не скопировал)...нице...поначалу по 60 страниц выдавало сейчас одна и каптча....после каптчи ваще тишина...может потому что локально... ну лан, ждем от тебя продолжения....
Re: Яндекс...... Эт поначалу а капча она через неск часов сама удаляется... Вообще в аудиторах чтоб меньше банили зажерэка в три секунды между запросывми.. У себя я рандомайзом думаю добавлю от 1 до 4... Плюс ссылки будет ходить не 1 - 2 - 3 -4.. А к примеру 1-4 -2 -3.... Это чтоб капча быстро не кидалась... Сейчас с разбирусь ток с кой чем.. Добавлено спустя 47 секунд: А тебе значит лучше под прокси заходить на рф который
Re: Яндекс...... Наконец работает и более не надо свои куки откуда то там копировать скрипт сам дергает... Щас тестю
Re: Яндекс...... ТС объясни что конкретно тебе парсить надо со странице яндекса? Ее полностью и для чего? И что ты потом с этим будешь делать? А то что-то я не вкурил. Заинтриговал, мб помогу.
Re: Яндекс...... Та я кэш яндекса парсил.. Все сейчас скрипт сработал как надо капча вводится опробовал ее не раз... Вродь все работает))