#php #web-scraping
Вопрос:
Спасибо, что разобрались в этом. Хотя это может быть простой проблемой, я слишком новичок в сканировании страниц, чтобы понять, почему этот простой код возвращает «false». В большинстве примеров, которые я вижу в Интернете, используется базовый URL-адрес, но я пытаюсь просмотреть конкретную страницу продукта. Используя ‘http://www.google.com/’ работает нормально. Может быть, меня заблокировали? Если да, то как бы это обойти в php? В python можно было бы чередовать учетные записи пользователей и прокси-серверы. Любые крупицы знаний будут оценены по достоинству. Вот базовый код с конкретной ссылкой.
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/simple_html_dom.php');
$url = 'https://www.lowes.com/pd/Frigidaire-Gallery-22-cu-ft-Counter-depth-Side-by-Side-Refrigerator-with-Ice-Maker-Fingerprint-Resistant-Black-Stainless-Steel/1000368269';
$html = file_get_html($url);
Спасибо, ребята.
Комментарии:
1. Использование
file_get_contents
вместоfile_get_html
того, чтобы сообщить нам, что Лоус возвращает запрещенный 403, у них, вероятно, есть какая-то технология защиты от соскабливания.
Ответ №1:
Лоус внедряет некоторые технологии защиты от соскабливания, на которые вы не можете положиться file_get_html
. Однако вы можете использовать curl
функции PHP, а затем использовать str_get_html
простой HTML-DOM.
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/simple_html_dom.php');
$url = 'https://www.lowes.com/pd/Frigidaire-Gallery-22-cu-ft-Counter-depth-Side-by-Side-Refrigerator-with-Ice-Maker-Fingerprint-Resistant-Black-Stainless-Steel/1000368269';
// From https://gist.github.com/fijimunkii/952acac988f2d25bef7e0284bc63c406
$user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
];
// Get random user agent
$user_agent = $user_agents[rand(0,count($user_agents)-1)];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$exec = curl_exec($ch);
$html = str_get_html($exec);
Комментарии:
1. Это была опечатка, она хотела сказать
file_get_html
2. Спасибо, мулькин. Спасибо, что указали мне правильное направление: «завиток». Я изучил curl и несколько учебных пособий, чтобы понять и использовать его. Я добавил случайный user_auth и использование прокси-серверов, на которые мы подписываемся. Я получаю ответ, так что вы помогли мне преодолеть это препятствие до того момента, когда я понял, что «Доступ запрещен». Теперь моя цель-преодолеть это. Одно изменение в вашем коде — количество должно быть ‘count($user_agent)-1 Спасибо, мулькин!
3. @napierjohn Добро пожаловать, и спасибо за редактирование, я обновил ответ. Обязательно отметьте ответ как принятый, если вы в состоянии 🙂 Удачи вам в этом!