file_get_contents()返回错误的页面

时间:2018-10-19 22:18:14

标签: javascript php

我正在尝试使用功能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

        }

1 个答案:

答案 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不再适用于大多数网站。