簡體   English   中英

file_get_contents() 返回錯誤的頁面

[英]file_get_contents() returns the wrong page

我正在嘗試使用函數 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

        }

當涉及到加載 URL 內容時,讓我們將file_get_contents()稱為“愚蠢”函數。 它將返回第一次加載 DOM 時呈現的內容。

要獲取很多網站的實際內容,還需要遵循重定向,這可以通過使用curl來實現(請參閱: 如果發生重定向,如何在 file_get_contents 后獲取真實 URL?

如果最終頁面使用大量 AJAX 來加載數據,即使 curl 也不會提供所需的內容,而是一些沒有實際內容的“裸”HTML 頁面。


因此,如今,您需要手動加載異步內容,方法是解析初始 url 的內容、解析 JS 文件、獲取 ajax-url 並再次調用它們,同時傳遞目標頁面可能為您的請求生成的 cookie ...

或者使用“本地客戶端”,它將像瀏覽器一樣執行頁面並能夠返回最終數據。

只是調用file_get_contents("url"); 並期待相同的源代碼,就好像您在瀏覽器中調用 url 對大多數網站不再起作用一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM