Парсер скидывает на 404 ошибку

477
04 февраля 2017, 11:10

Доброго времени суток всем, собственно по быстрому написал маленький парсер используя Simple HTML DOM, собственно все работает как мне необходимо кроме одной вещи, я получаю ссылки на товары со страницы категории, пишу их в массив и далее пытаюсь спарсить каждую страницу, но не тут то было, меня (парсер) почему то скидывает на 404 страницу, если же написать ссылку вручную, а не забирать с массива, то все работает должным образом. Может кто сталкивался, что сможете посоветовать? Код прилагаю ниже.

<?php 
$url=$_GET['url'];
$site_url = 'https://koleso2000.ua';
$category_url = 'https://koleso2000.ua/shini';
if(isset($url) && $url != "")
    {
        require_once 'simple_html_dom.php';
        for($i=1;$i<=1;$i++)
            {
                $ch = curl_init();
                curl_setopt($ch,CURLOPT_URL, $category_url.'?page='.$i.'');
                curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $result_category = curl_exec($ch);
                curl_close($ch);        
                $html_category = str_get_html($result_category);
                if(count($html_category->find("/html",0)))
                    {                               
                        foreach($html_category->find('div.productsWrap a') as $href)
                            {
                                if($href->plaintext != 'Купить ')
                                    {
                                        if($href->href != $duble)
                                        {
                                            $product_url[] = $site_url.$href->href.'</br>';
                                            $duble = $href->href;                                   
                                        }
                                    }
                            }   
                    }
                else
                    {
                        echo 'Не загружен объект категории!';
                    }
            }   

        foreach($product_url as $url_product)
            {
                $ch = curl_init();
                curl_setopt($ch,CURLOPT_URL, $url_product );
                curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $result = curl_exec($ch);
                curl_close($ch);
                $html = str_get_html($result);
                if(count($html->find("/html",0)))
                    {       
                        $price  = $html->find('span.price',0);          
                        $price = $price->plaintext; 
                        $price = str_replace(" грн ", "", $price);
                        $price = strip_tags($price);        
                        $image = $html->find('img',2);
                        $image_src = $image->src; 
                        $image_alt = $image->alt;
                        $image =  '<a href="https://koleso2000.ua/'.$image_src.'">'.$image_alt.'</a></br>';     
                        $name = $html->find('h1',0);;
                        $name = $name->innertext;
                        $name = strip_tags($name);
                        $brand  = $html->find('div.second p a',1);          
                        $brand = $brand->plaintext; 
                        $brand = strip_tags($brand);
                        $model = $html->find('div.in-top p',0);
                        $model = strip_tags($model);
                        $model = str_replace(" ", "", $model);
                        $model = explode(':',$model);
                        $model = $model[1];
                        $width = $html->find('div.second p',2);
                        $width = $width->plaintext; 
                        $width = strip_tags($width);
                        $height = $html->find('div.second p',3);
                        $height = $height->plaintext; 
                        $height = strip_tags($height);
                        $diameter = $html->find('div.second p',4);
                        $diameter = $diameter->plaintext; 
                        $diameter = strip_tags($diameter); 
                        $speed = $html->find('div.second p',5);
                        $speed = $speed->plaintext; 
                        $speed = strip_tags($speed);
                        $weight = $html->find('div.second p',6);
                        $weight = $weight->plaintext; 
                        $weight = strip_tags($weight);
                        $season = $html->find('div.second p',7);
                        $season = $season->plaintext; 
                        $season = strip_tags($season);
                        $ship = $html->find('div.second p',8);
                        $ship = $ship->plaintext; 
                        $ship = strip_tags($ship);
                        $type = $html->find('div.second p',9);
                        $type = $type->plaintext; 
                        $type = strip_tags($type);
                        echo '<img src="https://koleso2000.ua/'.$image_src.'" alt="'.$image_alt.'" style = "width:200px;"><br><br>';                
                        echo 'Наименование - '.$name.'<br>';
                        echo 'Цена - '.$price.'<br>';
                        echo 'Картинка - '.$image.'';
                        echo 'Бренд - '.$brand.'<br>';  
                        echo 'Код - '.$model.'<br>';
                        echo 'Ширина - '.$width.'<br>';
                        echo 'Высота - '.$height.'<br>';
                        echo 'Диаметр - '.$diameter.'<br>';
                        echo 'Индекс скорости - '.$speed.'<br>';        
                        echo 'Индекс нагрузки - '.$weight.'<br>';
                        echo 'Сезон - '.$season.'<br>';
                        echo 'Шипы - '.$ship.'<br>';
                        echo 'Тип - '.$type.'<br><br>';
                    }
                else
                    {
                        echo "Объект не загружен!";
                    }
                $html->clear();
                unset($html);
            }   
    }
else
    {
        echo 'Не передана ссылка на страницу';
    }
?>
Answer 1

Всем спасибо проблему решил самостоятельно, всему виной была моя конкатенация в создании массива ссылок на товары, для теста изначально выводил с переносом на следующую строку, а после переделки забыл убрать .'< /br>' собственно из за этого парсер и отправляли на 404.

READ ALSO
Скрипт не работает с файлами при запуске через cron

Скрипт не работает с файлами при запуске через cron

Есть скрипт, который работает с БДСразу после запуска записывает в файл "Идёт обновление", а перед выходом "Обновлено [дата]"

479
Остатки на складе больше 3 месяцев

Остатки на складе больше 3 месяцев

Доброго времени сутокДосталась большая база с данными, и нужно вывести отчет об остатках на складе больше 3 месяцев, не затрагивая структуру...

430
php &amp; nodejs (под задачи, личное мнение)

php & nodejs (под задачи, личное мнение)

Здравствуйте, изучаю php уже пол года, создавал пару сайтов, но всегда меня заносило на создание динамический сайтов, использую для этого ajax + phpТак...

448
Обработать JSON строку по POST запросу

Обработать JSON строку по POST запросу

Из Android приложения делаю POST запрос с JSON строкой на свой сервер(php)Как на сервере мне обработать JSON? Можно какой-то пример или ссылку?!

478