我正在尝试使用功能file_get_contents($ url)抓取一些内容。但它不会返回正确的内容。它只返回一些脚本,我认为它们负责位置和语言检查,然后失败,并且不会继续抓取整个页面
$url = 'https://shop.bitmain.com/';
$exists;
$url_headers = get_headers($url);
if(!$url_headers || $url_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
if(filter_var($url, FILTER_VALIDATE_URL) == FALSE || $exists == false) {
$error .= '<div class="alert alert-danger" role="alert">That city could not be found.</div>';
} else if (filter_var($url, FILTER_VALIDATE_URL) == TRUE && $exists == true){
$html = file_get_contents($url);
if ($html != FALSE && $html != NULL)
echo $html
}
答案 0 :(得分:1)
当涉及到加载URL内容时,我们将file_get_contents()
称为“哑巴”功能。当第一次加载DOM时,它将返回显示的内容。
要获取许多网站的实际内容,您还需要遵循重定向,可以使用curl
(请参阅:How to get the real URL after file_get_contents if redirection happens?)来实现
如果最终页面使用大量AJAX来后期加载数据,即使curl也无法提供所需的内容,但是有些“裸”的HTML页面却没有实际内容。
因此,如今,您需要手动处理加载异步内容,方法是解析初始url的内容,解析JS文件,获取ajax-url并在传递目标页面可能生成的cookie时再次调用它们根据您的要求...
或使用“本地客户端”,它将像浏览器一样执行页面并能够返回最终数据。
仅调用file_get_contents("url");
并期望使用相同的源代码,就好像您在浏览器中调用url不再适用于大多数网站。