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

Тема в разделе "PHP", создана пользователем Alix, 12 июн 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Народ, может кто сталкивался с подобной траблой - при попытке "поспрашивать" Яндекс о индексации определенных доменов вылазит еггог вида

    400 Bad Request​

    nginx/0.6.31​

    Подробности: дергаю через курл подобным образом:
    PHP:
        $ch curl_init('http://www.yandex.ru/yandsearch?serverurl='.$link);
        
    curl_setopt($chCURLOPT_USERAGENT$user_agent);
        
    curl_setopt($chCURLOPT_HEADER0);
        
    curl_setopt($chCURLOPT_POST0);
        
    curl_setopt($chCURLOPT_TIMEOUT20);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    Причем есть еще одна особенность - резалты по первому домену отображаются норм, а вот по всем последующим - вышеописанный еррор. В какую сторону копать?
     
  2. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Alix нравится это.
  3. denover

    denover Постоялец

    Регистр.:
    5 июн 2008
    Сообщения:
    56
    Симпатии:
    7
    А что ты пишешь в $user_agent ?
     
  4. denover

    denover Постоялец

    Регистр.:
    5 июн 2008
    Сообщения:
    56
    Симпатии:
    7
    А если так ?
    PHP:
    $ch curl_init();
    curl_setopt($chCURLOPT_URL,'http://www.yandex.ru/yandsearch?serverurl='.$link);
    curl_setopt($chCURLOPT_USERAGENT$user_agent);
    curl_setopt($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_POST0);
    curl_setopt($chCURLOPT_TIMEOUT20);
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
     
  5. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    последовал совету D@nil, все заработало. D@nil, можно пару комментариев насчет "ввв" и "без ввв". В чем в данном случае соль?

    denover, $user_agent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.1)". Имхо разницы в твоем и моем коде существенной нет. Во всяком случае еггоги теже самые, если .зать с "ввв". Так что ждем комментариев D@nil-a.
     
  6. freelancer_zp

    freelancer_zp Создатель

    Регистр.:
    4 май 2008
    Сообщения:
    12
    Симпатии:
    30
    Ну ещё не забывай про паузы между запросами или прокси...

    Добавлено через 6 минут
    FOLLOWLOCATION не всегда отрабатывает?

    Суть в том что при запросе http://www.yandex.ru/yandsearch?text=ПОИСК, происходит переход на http://yandex.ru/yandsearch?text=ПОИСК

    В теории, возможно, что при частом запросе c www yandex палит работу скрипта быстрее чем без
     
  7. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84


    Да, слип стоит - 20 сек. Хотя бана от SE за парсинг еще не получал :)


    Посмотрел, действительно кидает на урл без "ввв". Да уж, интересно как это FOLLOWLOCATION тогда себя ведет. Неясная закономерность - хуже дефекта :)
     
  8. Evgen_XXX

    Evgen_XXX Создатель

    Регистр.:
    8 май 2008
    Сообщения:
    12
    Симпатии:
    1
    Вопрос в тему
    Может кто-нибудь сталкивался с подобной проблемой
    Пытаюсь загрузить карточку товара с яндекс.маркета
    Вот код
    PHP:
    <?php
    function get_page ($url$proxy=FALSE)
    {
        global 
    $agent$header;  
        if(
    $proxy != FALSE
        
    curl_setopt($chCURLOPT_PROXY$proxy);
        
    curl_setopt($chCURLOPT_URL'http://market.yandex.ru/search.xml?cvredirect=1&text=Nokia+6500'); 
        
    curl_setopt($chCURLOPT_HEADER1);
        
    curl_setopt($chCURLOPT_TIMEOUT60);
        
    curl_setopt($chCURLOPT_REFERER'http://www.google.com.ua');  
        
    curl_setopt($chCURLOPT_USERAGENT$agent);
        
    curl_setopt($chCURLOPT_HTTPHEADER $header );
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);  
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__) . "/cookie.txt");
        
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__) . "/cookie.txt");
        
    curl_setopt($chCURLOPT_CONNECTTIMEOUT60);
        
    $result curl_exec($ch);

        if (!
    $ch
            return 
    false;
        
        if (
    curl_errno($ch)) 
        { 
            
    curl_close($ch);
            return 
    false;
        }
        
    curl_close($ch);
        return 
    $result;
    }
    ?>
    Никак не происходит редирект
    Заранее благодарен всем откликнувшимся
     
  9. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Яндекс ввел редирект с www.yandex.ru на yandex.ru чтоб срезать разнообразные парсеры и скрипты.
    + Для красоты :)

    Сейчас все актовно обновляют прожки и скриптики :)
     
  10. Avtandil

    Avtandil Создатель

    Регистр.:
    30 сен 2006
    Сообщения:
    30
    Симпатии:
    24
    Скрипт получения ТИЦ

    Вот простенький скрипт получения ТИЦ. Может кому пригодится?
    PHP:
    $host $_GET['host']; if (empty($host)) exit();
    $html preg_replace('/[\r\n]/','',join(file("http://search.yaca.yandex.ru/yca/cy/ch/$host/")));
    if (
    strlen($html)>100)
      if (
    strpos($html,iconv('WINDOWS-1251','UTF-8','ресурса меньше 10'))!==FALSE) echo 'CY < 10';
      elseif (
    ereg('&#151; ([0-9]+)</b>',$html,$cy)) echo 'CY = ',$cy[1];
      elseif (
    ereg(str_replace('.','\.',$host).'(.*)</div></td><td align="right">([0-9]+)</td>',$html,$cy)) echo 'CY = ',$cy[2];
      else echo 
    'Parse error';
    else echo 
    'Fetch error';
     
    pslava нравится это.
Статус темы:
Закрыта.