Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: парсер yandex с решением captcha
Форумы портала PHP.SU » » Работа с сетью » парсер yandex с решением captcha

Страниц (2): [1] 2 »
 

1. RinaFolk - 13 Ноября, 2014 - 11:41:33 - перейти к сообщению
.
2. RinaFolk - 13 Ноября, 2014 - 12:07:44 - перейти к сообщению
Здравствуйте!
возникла проблема в парсинге яндекса.
парсер xml уже есть, теперь нужен парсер в лоб.
не получается отправить запрос на решение captcha, в ответ приходит, что страница не найдена.
буду рада помощи
листинг:
PHP:
скопировать код в буфер обмена
  1. $query_utf8 = urlencode(iconv('windows-1251','utf-8',$query));
  2.                 $region_utf8 = urlencode(iconv('windows-1251','utf-8',$region));
  3.                 $cookiefile = dirname(__FILE__)."/_cookie_position.txt";
  4.                 $user_agent="Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
  5.                
  6.                 $sizeof_proxy_list = sizeof($this->proxy_list);
  7.  
  8.                 $search=array("text"=>urlencode($query_utf8),
  9.                                           "numdoc"=>$results_per_page,
  10.                                           "lr"=>$region_utf8);
  11. $setopt_url='http://yandex.ru/yandsearch?text='.$search['text'].'&p='.$j.'&numdoc='.$search['numdoc'].'&lr='.$search['lr'].'';
  12.                                        
  13.  
  14.                                         $output=$this->get_curl_info($setopt_url);
  15.  
  16.  
  17.                                         if(strpos($output,'<form action="/checkcaptcha" method="GET">')!=false)
  18.                                         {
  19.                                                 $addur=new addurl;
  20.                                                 $key=getTag('<input type="hidden" name="key" value="','">',$output);
  21.                                                 $retpath=getTag('<input type="hidden" name="retpath" value="','">',$output);
  22.                                                 $filename=$addur->saveCaptcha(getTag('<img src="','" class="b-captcha__image">',$output));
  23.                                                 $result_key=iconv('utf-8','windows-1251',$addur->antigateRecognize($filename));
  24.                                                 $post=array("key"=>$key,
  25.                                                                         "retpath"=>$retpath,
  26.                                                                         "rep"=>$result_key);
  27.                                                 //print_r($post); die();
  28.                                                 $output=$this->get_curl_info('http://yandex.ru/checkcaptcha?key='.$post['key'].'&retpath='.$post['retpath'].'&rep='.$post['rep'].'');
  29.                                                 print_r($output); die();
  30.                                         }
  31.  
  32. function get_curl_info($url,$post="")
  33.         {
  34.                 $path_up = "../";
  35.                 $user_agent="Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
  36.                 $cookiefile = dirname(__FILE__)."/_cookie_position.txt";
  37.  
  38.                 $ch = curl_init();
  39.                 curl_setopt($ch, CURLOPT_URL, $url);
  40.                 curl_setopt($ch, CURLOPT_HTTPGET, 1);
  41.                 curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
  42.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  43.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  44.                 curl_setopt($ch, CURLOPT_HEADER, 0);
  45.                 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
  46.                 //curl_setopt($ch, CURLOPT_HTTPHEADER, array($referer_new));
  47.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  48.                 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
  49.                 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
  50.                 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
  51.                 curl_setopt($ch, CURLOPT_VERBOSE, true);
  52.                 $verbose = fopen($path_up.'modules/temp', 'w+');
  53.                 curl_setopt($ch, CURLOPT_STDERR, $verbose);
  54.                 curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  55.                 //curl_setopt($ch, CURLOPT_FRESH_CONNECT, FALSE);
  56.                 //curl_setopt($ch, CURLOPT_NOBODY,true);
  57.                 curl_setopt($ch, CURLOPT_REFERER, $url);
  58.                 if (is_array($post))
  59.                 {
  60.                         curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос
  61.                         $query=http_build_query($post);
  62.                         curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
  63.                 }
  64.  
  65.                 $data = curl_exec($ch);
  66.                 return $data;
  67.         }
  68.  


P.S. не судите строго, программирую на php не так давно
3. RinaFolk - 13 Ноября, 2014 - 12:32:11 - перейти к сообщению
почему удаляют мои сбщ и темы?( где справедливость?
(Добавление)
P.S. прошу не судить строго, ибо программирую на php не так долго
4. Мелкий - 13 Ноября, 2014 - 12:57:23 - перейти к сообщению
Потому что тема уже есть.
5. RinaFolk - 13 Ноября, 2014 - 13:10:51 - перейти к сообщению
Мелкий пишет:
Потому что тема уже есть.


те, которые я нашла, устарели
6. Мелкий - 13 Ноября, 2014 - 13:14:14 - перейти к сообщению
Эта тема есть.
7. RinaFolk - 13 Ноября, 2014 - 13:18:30 - перейти к сообщению
Мелкий пишет:
Эта тема есть.


про свою тему я и так прекрасно знаю, но удалять сообщения с имеющихся, по похожей тематике, я считаю как то неправильно
8. Мелкий - 13 Ноября, 2014 - 13:28:44 - перейти к сообщению
А я считаю неправильным спамить одинаковыми сообщениями.
И с пунктом 1.16 действующих правил вы должны быть ознакомлены, поскольку зарегистрированы.
9. RinaFolk - 13 Ноября, 2014 - 13:34:15 - перейти к сообщению
Мелкий пишет:
А я считаю неправильным спамить одинаковыми сообщениями.
И с пунктом 1.16 действующих правил вы должны быть ознакомлены, поскольку зарегистрированы.


хорошо. тогда приношу свои извенения. я не сидела раньше на форумах.
(Добавление)
Мелкий пишет:
А я считаю неправильным спамить одинаковыми сообщениями.
И с пунктом 1.16 действующих правил вы должны быть ознакомлены, поскольку зарегистрированы.


а вы случайно не знаете, как решить мою проблему?...нигде ответов нет...и я сама не пойму...кто то направил на яндекс апи, но я не совсем понимаю, как пользоваться данным инструментом
10. and_07 - 13 Ноября, 2014 - 16:17:22 - перейти к сообщению
Не понятно для чего вам это нужно
у яндекса есть свой API для разработчика

если нужно эмулировать пользователя вы выбрали не очень хороший вариант
11. esterio - 13 Ноября, 2014 - 16:42:50 - перейти к сообщению
and_07 пишет:
если нужно эмулировать пользователя вы выбрали не очень хороший вариант

практически верно, но есть случаи когда нужно емулировать действия вместо использования АПИ. как пример фесбук. был проект где в форме пользователя стояло поле которое отсутсвувало в АПИ.

По сажу виведите все что возвращает curl в браузер и посмотрите есть ли там капча
12. and_07 - 13 Ноября, 2014 - 16:59:51 - перейти к сообщению
esterio пишет:
практически верно, но есть случаи когда нужно емулировать действия вместо использования АПИ. как пример фесбук. был проект где в форме пользователя стояло поле которое отсутсвувало в АПИ.


не понял
я и говорю для эмуляции действий пользователя данный вариант не оч хороший
13. esterio - 13 Ноября, 2014 - 17:02:04 - перейти к сообщению

and_07
тогда я вас не понял
14. RinaFolk - 14 Ноября, 2014 - 08:49:16 - перейти к сообщению
and_07 пишет:
Не понятно для чего вам это нужно
у яндекса есть свой API для разработчика

если нужно эмулировать пользователя вы выбрали не очень хороший вариант


под api вы подразумеваете получение xml?
простите, если не правильно поняла..
я просто пока не так много знаю..

реализация с обработкой xml у меня есть, там позиции отличаются от реальных, поэтому мне дали задание еще сделать инструмент для получения позиций в лоб, а с этим почему то проблема...мне приходит ответ на гет запрос страница, про которую яндекс говорит, что ее не существует...и я не пойму почему так
(Добавление)
esterio пишет:
and_07 пишет:
если нужно эмулировать пользователя вы выбрали не очень хороший вариант

практически верно, но есть случаи когда нужно емулировать действия вместо использования АПИ. как пример фесбук. был проект где в форме пользователя стояло поле которое отсутсвувало в АПИ.

По сажу виведите все что возвращает curl в браузер и посмотрите есть ли там капча


каптча приходит, все верно, и я достаю все данные для ее разрешения, но ответ есть несуществующая страничка
(Добавление)
делала эту имитацию в фидлере, все работает..перепроверила то, что отправляю я сама, все тоже самое..
15. and_07 - 14 Ноября, 2014 - 10:46:36 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. //как понимаю тут ломаем капчу antigateRecognize
  4. $result_key=iconv('utf-8','windows-1251',$addur->antigateRecognize($filename));
  5.  
  6.  
  7. //формируем массив для отправки
  8. $post=array("key"=>$key,"retpath"=>$retpath,"rep"=>$result_key);
  9.  
  10. //print_r($post); die();
  11.  
  12. //отправляем данные из $post методом GET
  13. $output=$this->get_curl_info('http://yandex.ru/checkcaptcha?key='.$post['key'].'&retpath='.$post['retpath'].'&rep='.$post['rep'].'');
  14.  
  15.  print_r($output); die();


а теперь вопрос
вы уверены что отправлять нужно GET?

если вбить полученный урл в браузере что выводит?

 

Powered by ExBB FM 1.0 RC1