Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пытаюсь парсить товары с магазина ДНС, но получаю всё время array(0) PHP

Совсем Додик Ученик (29), закрыт 1 год назад
Сайты которые не особо такие известные и простые парсятся легко, а днс и ситилинк не хотят(на ситилинке уже бан по ip получил:) ).
В общем, пишу код(который снизу напишу) и при запросе не могу получить хотя бы ссылку на товар. Путь указываю правильно и классы тоже, и теги, но постоянно при выводе пишет array(0) { }
Есть же наверное какие-то способы обойти эту защиту? Использую библиотеку phpQuery по совету ютубера:)
На скрине я пытаюсь хотя бы ссылки на товары вытянуть, но их он не отдаёт. Ситилинк отдавал ссылки, но не отдавал название и цену, а днс вообще всё зажопил
Лучший ответ
фигня какая-та Мастер (1002) 1 год назад
это не защита, все эти данные уже с помощью js фетчатся через отдельные апи запросы.
открой вкладку network в dev tools, обнови страницу и увидишь это.

если тебе нужна именно таблица цен на все товары по определенному поисковому запросу, то пробуй работать с их апи так же, как это делают они.

если тебе нужна цена только определенного товара, то обратись по ссылке на этот товар, там цена встречается минимум 2 раза в сыром виде (т.е. к примеру не 16 999 ₽ в каком-то dom элементе, а 16999 в каком-то js коде и json объекте + еще какие-то данные)

ссылки же на сами товары есть, просто селектор неправильно указан - "a" с конца убери, т.к. .catalog-product__name уже является этим <a>
вот какие данные есть без их апи (включая ссылку на товар)
Совсем ДодикУченик (29) 1 год назад
селектор убрал, но всё равно array(0) выводится. Даже если в массив записать $arrDataCards[] = ["name" => "dada"]; и вывести за пределами цикла то он мне пишет array(0). Он почему-то не видит данные внутри массива.
Таким методом который я делаю не получится спарсить с днс? Нужно через API делать или это просто рекомендация?
Совсем ДодикУченик (29) 1 год назад
на счёт первого предложения отбой, я там тупанул...
а вот второе предложение ещё под вопросом)
Совсем Додик, а нафига ты вообще на PHP парсеры пишешь? Напиши на Python и все будешь парсить вообще без проблем
Остальные ответы
Алена Агина Мудрец (14307) 1 год назад
чтобы это селать через Curl, тебе надо cookie завести, их передать, тебе надо броузер передать в заголовке, тебе надо задать переменную перехода, с какой страницы перешёл на эту.

У тебя этого НЕТ, любой нормальный сайт знает, что ты РОБОТ сразу...
Саня Семенов Оракул (60428) 1 год назад
1 парсить вобще это не законно
2 если все же надо то готовься обходить капчу/ блеклист/ антитроттлинг/ антиддос/ редирект ы/ фнтиXSS ит п
3 получаешь через курл - смотри что в боди написано и вобще вернулась ли страница с кодом 200 или другим кто будет проверять
4 сразу говорю в одну строчку это не пишется
5 чтобы авторизоваться надо хранить куки ввести логин пароль, отправить серверу получить SSESION_ID сохранить и использовать в следующем запросе
Похожие вопросы