Простой HTML Dom не запрашивает страницу Amazon - PullRequest
0 голосов
/ 01 мая 2019

Привет, я пытаюсь разобраться с ценами продуктов Amazon, но когда я запрашиваю страницу через html dom, она показывает пустую страницу, но если я добавлю ссылку на aliexpress, она будет работать нормально

например:

$value = "https://www.amazon.com/Apple-iPhone-Plus-Unlocked-32GB/dp/B01N6ZAR0D/"
$html = file_get_html($value);

echo $html;

1 Ответ

0 голосов
/ 01 мая 2019

Запрос напрямую через html dom-клиент не предлагается. Особенно, если вы работаете на большом сайте, таком как Amazon. Такие сайты, как Amazon, проверяют информацию о клиентском агенте клиента, куки-файлах и заголовках, чтобы проверить безопасность и проверить, бот или нет.

Итак,

Вы должны использовать curl или guzzle для запроса веб-страницы с указанием необходимых заголовков запроса. После запроса получите возвращенную строку ответа и проанализируйте ее через str_get_html.

Пример:

$response = $client->request($url);
$html = str_get_html($response);

Реальный рабочий пример для вашего вопроса: Нажмите на эту ссылку , чтобы получить код через github

require __DIR__ . '/vendor/autoload.php';
require 'simple_html_dom.php';
use Curl\Curl;

// initialize curl
// you can install via "composer require php-curl-class/php-curl-class"
$curl = new Curl();

// set cookies
$curl->setCookieFile(__DIR__ . '/cookies.txt');
$curl->setCookieJar(__DIR__ . '/cookies.txt');

// decode gzip encoded because amazon is using gzip
$curl->setOpt(CURLOPT_ENCODING , "gzip");

// set request header like a browser
$curl->setHeaders([
    'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'accept-encoding' => 'gzip, deflate, br',
    'accept-language' => 'en,tr;q=0.9',
    'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
]);

// request
$curl->get('https://www.amazon.com/Apple-iPhone-Plus-Unlocked-32GB/dp/B01N6ZAR0D/');

// get raw response
$response = $curl->getRawResponse();

// parser
$html = new simple_html_dom();

// load from string html
$html->load($response);

// find price and print
$price = $html->find('#price', 0)->plaintext;
echo $price;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...