Я использую один и тот же код для получения цены разных веб-страниц (в частности, 7), все работает идеально, но в 1 я не могу получить данные, не могли бы вы сказать мне, если это невозможно, если страница имеет какую-либо защиту ? Заранее спасибо.
$source = file_get_contents("https://www.cyberpuerta.mx/Computo-Hardware/Discos-Duros-SSD-NAS/Discos-Duros-Internos-para-PC/Disco-Duro-Interno-Western-Digital-Caviar-Blue-3-5-1TB-SATA-III-6-Gbit-s-7200RPM-64MB-Cache.html");
preg_match("'<span class=\"priceText\">(.*?)</span>'", $source, $price);
echo $price[1];
Я надеюсь, что этот результат: $869,00
Этот код плохо работает только на веб-сайте, указанном в коде.
@PayamKhaninejad На самом деле этот код (изменение классов), если он позволяет мне получать данные с Amazon.
Вам нужно включить error_reporting и обратить внимание на предупреждающие сообщения, которые очень интересны; см. 3v4l.org/LM1il. Проблема, по-видимому, действительно связана с конкретным веб-сайтом и средствами защиты, которые у них есть.
@ slevy1 Эти предупреждения - просто ограничение используемой вами песочницы.
Я не думаю, что 3v4l позволяет использовать file_get_contents. Но OP попробуйте вместо этого использовать завиток, который обычно работает, когда страница имеет такую защиту.
@DavidNoriega см. здесь: stackoverflow.com/questions/34288640/…
@andreas hase Я запускаю код, и появляется страница Google (честно говоря, я никогда не пытался), но как я могу реализовать это в своем коде? Я думаю, что мы на правильном пути, что-то мне это подсказывает.
Использование регулярного выражения для анализа html делает это неправильно.
Используйте curl с набором агентов, это обычно обманывает защиту веб-сайта, заставляя поверить, что это настоящий пользователь.
$URL = "https://www.cyberpuerta.mx/Computo-Hardware/Discos-Duros-SSD-NAS/Discos-Duros-Internos-para-PC/Disco-Duro-Interno-Western-Digital-Caviar-Blue-3-5-1TB-SATA-III-6-Gbit-s-7200RPM-64MB-Cache.html";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL, $URL);
$result =curl_exec($ch);
preg_match("'<span class=\"priceText\">(.*?)</span>'", $result, $price);
echo $price[1];
Вы просто помогли не тому человеку. Прочтите: seo-theory.com/… Вы можете с этим не согласиться, но это правильное мнение. Подумайте о своей морали, пожалуйста.
@Software KIKO Это личный проект, который никогда не будет в сети, я буду использовать его для своего бизнеса локально, когда я цитирую кусок, который меня спрашивает клиент, мне нужно открыть 8 страниц, чтобы сравнить цены, таким образом я буду сэкономить много времени. Я понимаю озабоченность, но это в личных (некоммерческих) целях.
@DavidNoriega Вы не единственный читатель этого ответа. Впрочем, это принцип, а не про вас.
@KIKOSoftware не читал всего этого, но я видел, что ты паразит и веришь, что имеешь право на чужие данные и так далее... Это то, о чем ты споришь? С чего ты взял, что так всегда? У меня самого есть сканер, и у меня есть письменные соглашения со всеми страницами, которые я сканирую.
Дело в том, что вы помогаете роботам-краулерам лгать о своей личности. Это плохо для веб-сайта во всех смыслах. Не ленитесь, читайте статью и учитесь. @DavidNoriega В конечном итоге да, хотя ошибка была не твоей.
@KIKOSoftware Я прочитал это сейчас, и совершенно очевидно, что это написал сварливый человек. Нигде он не упоминает никаких исключений, таких как соглашения или веб-сайты, которые позволяют, даже если они имеют эти функции безопасности, или что вы можете связаться с владельцем. Если вы хотите, чтобы статья вызывала доверие, по крайней мере покажите обе стороны медали и скажите, что могут быть исключения из правил.
Ха-ха, да, очень сварливый. Идея обратиться к вебмастеру она есть, хотя и не явная. Все равно разрешения никто не спрашивает. Наверное, это и сделало его злым. Дело, конечно, в том, что сеть наводнена поисковыми роботами, которые лгут о своей личности, и это портит работу веб-сайтов. Это бесплатно для всех, кроме владельца сайта.
Я также только что закончил читать статью, и я не согласен на 100%, это просто: Заставляет ваших пользователей входить в систему и, если необходимо, платить за чтение того ценного контента, который вы не хотите, чтобы кто-либо видел (или еще лучше . .. не публиковать его в Интернете), в моем случае я приношу своим поставщикам тысячи прибыли за продажу их продуктов, я не думаю, что они злятся на то, что я сокращаю свое рабочее время и покупаю больше.
@DavidNoriega Тогда почему ты должен лгать о личности своего сканера? Другими словами; Даже массовый убийца может найти оправдание поступку, что не делает его правильным. (Кстати, я не хочу сравнивать вас с массовым убийцей, я просто хочу подчеркнуть, что хорошее оправдание не оправдывает плохое поведение).
@KIKOSoftware, а еще есть старая поговорка. Не размещайте в Интернете то, что вы не хотите, чтобы люди украли.
Скажи это европейцам! (см.: bbc.com/news/technology-47239600). Но я согласен с этим, вы не можете защитить веб-контент от копирования. Любая попытка этого обречена. Но вы явно все еще неправильно понимаете, я говорю не о контенте, я говорю о трафике.
хахаха уже хорошо, мы останавливаем это, им нужно проголосовать, чтобы стереть или нет это преступление: 1 или 0?
@DavidNoriega Для меня достаточно обсудить это, вам не нужно удалять преступление. (Могу ли я передумать?)
@Andreas Не мог бы ты мне еще раз помочь stackoverflow.com/questions/55718569/…
на некоторых веб-сайтах есть функция защиты от очистки, например Amazon, которая не позволяет очищать данные.