За последние 24 часа нас посетили 54365 программистов и 1768 роботов. Сейчас ищут 1403 программиста ...

Редирект при попытке парсинга

Тема в разделе "Прочие вопросы по PHP", создана пользователем r0ma, 19 окт 2015.

  1. r0ma

    r0ma Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    2
    Симпатии:
    0
    Приветствую.
    Парсинг конкретной страницы на сайте читай-город.ру работает без проблем (хвала CURL и simple_html_dom), но если попробовать напрямую зайти на страницу с результатами поиска по сайту (например, http://www.chitai-gorod.ru/search/result.php?q=php) происходит редирект на главную.
    И этот редирект не дает спарсить страницу с результатами поиска.

    Как спарсить страницу с результатами поиска по сайту до редиректа?

    Приведенный ниже код (при указании соответствующего url) 100% работает при парсинге ozon.ru и read.ru
    Код (PHP):
    1. <?
    2. require_once('vendor/simplehtmldom/simple_html_dom.php');
    3.  
    4. function get_result($url){
    5.  
    6.     $curl = curl_init();
    7.     $headers = [
    8.         'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0',
    9.         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    10.         'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    11.         'Connection: keep-alive'
    12.     ];
    13.  
    14.     $cookie = dirname(__DIR__)."/cookie.txt";
    15.     curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    16.     curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
    17.     curl_setopt($curl,CURLOPT_URL,$url);
    18.     curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);
    19.     curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    20.     curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
    21.     curl_setopt($curl,CURLOPT_COOKIEFILE,$cookie);
    22.     curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie);
    23.     $res = curl_exec($curl);
    24.  
    25.     return $res;
    26. }
    27. ?>
    28.  
    29. <html>
    30.     <head>
    31.         <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    32.         <meta charset="windows-1251">         
    33.         <link rel="stylesheet" type="text/css" href="style.css">
    34.         <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    35.     </head>
    36. <body>     
    37.  
    38. <div class="main">
    39.     
    40.     <form action = '' method="post">
    41.         <div class="form-group"><input class="form-control" type="text" name="zapros"></div>
    42.         <input class="btn btn-success" type="submit" name="submit" value="search">
    43.     </form>
    44.  
    45.     <?php 
    46.     if (isset ($_POST['submit'])) {
    47.         $user_query = urlencode ($_POST['zapros']);
    48.     ?>
    49.     
    50.     <hr><h2>Chitai-Gorod.ru</h2>
    51.     <div class="row">
    52.         <?php
    53.         $url = 'http://www.chitai-gorod.ru/search/result.php?q=' . $user_query;
    54.         $html = str_get_html( get_result($url) );
    55.         $title = $html->find(".ng-binding a");
    56.         $price = $html->find("div.butts span.ng-scope");
    57.         $img = $html->find("div.pic img");
    58.         
    59.         //количество найденных книг
    60.         $array_count = count($title);
    61.         
    62.         $title = array_slice($title, 0, 3);   // считываем первые 3 элемента массива
    63.         foreach ( $title as $key => $name ) { 
    64.         ?>
    65.         <div class="col-md-4">
    66.             <div class="panel panel-default">
    67.                 <div class="panel-heading"><p><?php echo $name->plaintext; ?><span class="price"><?php echo $price[$key]->plaintext; ?></span></p></div>
    68.                     <div class="panel-body">
    69.                         <div align="center">
    70.                             <img class="img-thumbnail" src="http://www.chitai-gorod.ru<?php echo $img[$key]->src; ?>">
    71.                         </div>
    72.                  </div>
    73.             </div>
    74.         </div>            
    75.         
    76.         <?php 
    77.         } //foreach
    78.     
    79.         $html->clear(); 
    80.         unset($html);
    81.         unset($array_count);
    82.         unset($title);
    83.         unset($price);
    84.         unset($img);
    85.         unset($name);
    86.         unset($key);
    87.         ?>
    88.         
    89.     </div>  
    90.  
    91. <?php } // if isset ($_POST['submit']) ?>
    92.     
    93. </div>
    94.     
    95.     
    96. </body>
    97. </html>
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    памятку читал?
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты конечно молодец что по моему совету вычитал в памятке пункт о подсветке кода. но я вообще намекал на то что тут не принято помогать воровать контент ни в каком виде.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  5. r0ma

    r0ma Новичок

    С нами с:
    19 окт 2015
    Сообщения:
    2
    Симпатии:
    0
    Воровать контент?
    Пишу "агрегатор" цен в книжных магазинах, для себя.
    Неужели кому-то доставляет удовольствие открывать по 10 вкладок в браузере и тратить время на сравнение цен.
    Получается, что price.ru и market.yandex.ru воруют контент?

    Все-таки жду от опытных разработчиков хотя бы намека на решение задачи.
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    r0ma, возможно они используют API
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нет, не воруют. сайт, желающий попасть в каталог, для начала выполняет ряд организационных требований а потом готовит плюшку называемую YML - формат экспорта для яндекс.маркета. так что это не воровство а сотрудничество. а у тебя воровство.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    r0ma как тебе писали выше, если захочешь сделать агрегатор в который книжные будут загружать свои цены, то пиши, тут помогут.