Странности при парсинге PHP

D
На сайте с 28.06.2008
Offline
1108
407
Паршу интернет магазин шин, стандартный каталог, но есть интересные нюансы.
Чтобы обойтись в меньшее кол-во запросов решил выбирать шины по ширине. Тестирую с ноута. Вот страница https://mosautoshina.ru/catalog/tyre/search/by-size/-295---------/

Выдает 240 результатов, далее страница пагинации https://mosautoshina.ru/catalog/tyre/search/by-size/-295---------/?show=catalog%2Ftyre%2Fsearch%2Fby-size%2F-295---------%2F&page=2

План был такой - зайти на страницу, вверху определить сколько шин, разделить на 240, округлить в большую сторону  и если больше 240 - пройтись по страницам пагинации начиная со второй.

Вот урезанный код, тестирую один проход, поэтому переопределяю $value и завершаю после 1 прохода

foreach ($width as $value) {
    $value = '295';
    $url = "https://mosautoshina.ru/catalog/tyre/search/by-size/-$value---------/";
    $refer = 'https://yandex.ru/search/?lr=213&clid=2270453&win=476&text=' . urlencode($url);
    $pars = getPageByUrl($url, $refer);
    $pq = phpQuery::newDocument($pars);
    $count = (int) trim($pq->find('.count-em')->text());
    var_dump($count);
    // первые 30 шин 
    $products = $pq->find('.infinite-scroll')->find('.product');
    $num=0;
    foreach ($products as $product){
        $num++;
        $pcProduct = pq($product);
        //title
        $title = '';
        $title = $pcProduct->find('a:eq(0)')->attr('title');
        var_dump($num.'-'.$title);
    }
  if ($count > 30){
                $page = ceil($count / 30);
                for($i=2;$i<=$page;$i++){
                    sleep(1);
                    $url2 = "https://mosautoshina.ru/catalog/tyre/search/by-size/-$value---$item------/?show=catalog%2Ftyre%2Fsearch%2Fby-size%2F-$value---$item------%2F&page=$i";
                    $refer2 = 'https://yandex.ru/search/?lr=213&amp;clid=2270453&win=476&text=' . urlencode($url2);
                    $pars2 = getPageByUrl($url2, $refer2);
                    $pq2 = phpQuery::newDocument($pars2);
                    $products = $pq2->find('.infinite-scroll')->find('.product');
                    foreach ($products as $product){
                        $all++;
                        $pcProduct = pq($product);
          ...................
exit();
}

1 -я странность, при запросе данные из скрипта пагинация уже не по 240 штук а по 30. Тут у меня было две мысли - определяют ширину экрана через JS или устройство по юзерагенту. Но я пробовал выключать у браузера JS и заходить в инкогнито - все равно через ПК пагинация по 240. Пробовал менять юзерагенты у курла - без эффекта. Пробовал записывать куки в браузере и подсовывать их через курл - без эффекта. Пробовал вообще без курла, через файлгет контент - тоже самое. Как сайт детектит что я не браузер если JS не причем?

Но не эта главная проблема

2-я странность - довольно часто скрипт получает вообще непрогнозируемые результаты, допустим на первой странице 43 результата, на второй 48, а дальше пустота, хотя при первом заходе общее кол-во шин что вверху пишет всегда определяет точно. Вот тут у меня вообще идей нет как так может происходить. Что может вызывать второй баг?



D
На сайте с 28.06.2008
Offline
1108
#1

Походу глючный магазин, впервые поймал эту пустоту и в браузере

U1
На сайте с 22.10.2013
Offline
71
#2
Скорее защита от парсинга стоит
maxxxx777
На сайте с 27.07.2015
Offline
52
#3
тут скорее нужно через зенно парсить. С полноценной эмуляцией браузера
D
На сайте с 28.06.2008
Offline
1108
#4
 Уже спарсил, там была мобильная версия, без защиты, работало стабильно, оттуда и вытащил

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий