DOMDocument иногда возвращает путаницу символов - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно извлечь DOM с внешнего сайта в php.Я пытался протестировать URL, но иногда он показывает много китайских букв :) (точнее, символы в юникоде, хотя я). Странно, что если я использую другую ссылку, это работает, но если я использую ссылку ниже и запускаю php для примера 3раз, после 3. попробуйте, он перестает работать (но в течение 1, 2 раз он показывает нормальную структуру DOM)

URL: https://www.csfd.cz/film/300902-bohemian-rhapsody/prehled/

DOM после 3. (ca.)пробег: https://i.stack.imgur.com/lnM1I.png

код:

$doc = new \DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTMLFile("https://www.csfd.cz/film/300902-bohemian-rhapsody/prehled/");
dd($doc->saveHTML());

Кто-нибудь знает, что делать?

1 Ответ

0 голосов
/ 23 февраля 2019

Я полагаю, что из-за сжатия сайта вы можете извлечь данные, используя старый добрый локон :

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.csfd.cz/film/300902-bohemian-rhapsody/prehled/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

$headers = array();
$headers[] = 'Connection: keep-alive';
$headers[] = 'Cache-Control: max-age=0';
$headers[] = 'Save-Data: on';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36';
$headers[] = 'Dnt: 1';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
$headers[] = 'Accept-Encoding: gzip, deflate, br';
$headers[] = 'Accept-Language: en-US;q=0.8,en;q=0.7,uk;q=0.6';
$headers[] = 'Cookie: nette-samesite=1; developers-ad=1;';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

$doc = new \DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($result);
dd($doc->saveHTML());
...