我想实现一些代码,从特定页面 DOM 收集评论。
cURL 结果不完整,我不知道为什么,因为 DOM 中的某些子标签在结果中不可见。
DOM 在检查器中看起来像这样:
我尝试使用以下代码片段收集 DOM:
$domain = 'feefo.com';
$page_id = 'firebrand-promotions';
$curli = curl_init();
curl_setopt_array($curli, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_URL => 'https://www.' . $domain . '/en-US/reviews/' . $page_id . '?displayFeedbackType=SERVICE&timeFrame=YEAR'
CURLOPT_HTTPHEADER => [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,* /*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Language: en-US;q=0.8,en;q=0.7',
'Cache-control: max-age=0',
'Referer: https://' . $domain,
'sec-fetch-mode: navigate',
'sec-fetch-site: none',
'sec-fetch-dest: document',
'sec-fetch-user: ?1',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
]
]);
$curlResult = curl_exec($curli);
我在 cURL 结果内容部分看到的是这样的:
<div class="container">
<global></global>
</div>
因此 标记看起来是空的,但它不应该是空的。
我尝试使用以下代码提取 标记内容:
$dom = new DOMDocument();
$dom->validateOnParse = true;
@$dom->loadHTML($curlResult);
$globals = $dom->getElementsByTagName('global');
$xmlPath = new DOMXPath($dom);
$reviews = $xmlPath->query('//global');
但我仍然没有在 标签中看到任何标签。
有人可以向我解释一下这个问题吗?如何解决这个问题?
非常感谢您的帮助、努力和时间。 :)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
很有可能你在 Curl 中得到的正是浏览器得到的,但浏览器开始执行修改 DOM 的 javascript。
你看不到 with with Curl,因为 Curl 无法执行 Javascript。