php採集網頁數據不完整問題(php採集網頁數據不完整問題怎麼解決)

本文目錄一覽:

php抓取網頁內容不完整

用CURL可以抓取到的 可能是你網速太慢超時了 所以抓取不完整 用 curl_setopt($ch, CURLOPT_TIMEOUT, 360) 試試看

用PHP獲取網頁內容的時候獲取不完全 求能完全獲取的方法

curl是獲取的服務器端編譯後返回的代碼 . 是原始的.

curl 里 沒法解析執行js . 所以得到的一直都是原始的代碼.

而瀏覽器在拿到服務器返回的代碼的時候, 會執行頁面加載js ,

js 會在DOM 里動態添加或修改刪除一些節點元素.

查看元素看到的就是經過js一頓處理之後的html內容 不是原始的了. ..

所以單純使用curl 沒法獲取到”所見即所存”的代碼…

php獲取數據為什麼curl獲取不完整

因為,PHP CURL庫默認1024字節的長度不等待數據的返回,所以你那段代碼需增加一項配置:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Expect:’));

給你一個更全面的封裝方法:

function req_curl($url, $status = null, $options = array())

{

$res = ”;

$options = array_merge(array(

‘follow_local’ = true,

‘timeout’ = 30,

‘max_redirects’ = 4,

‘binary_transfer’ = false,

‘include_header’ = false,

‘no_body’ = false,

‘cookie_location’ = dirname(__FILE__) . ‘/cookie’,

‘useragent’ = ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1’,

‘post’ = array() ,

‘referer’ = null,

‘ssl_verifypeer’ = 0,

‘ssl_verifyhost’ = 0,

‘headers’ = array(

‘Expect:’

) ,

‘auth_name’ = ”,

‘auth_pass’ = ”,

‘session’ = false

) , $options);

$options[‘url’] = $url;

$s = curl_init();

if (!$s) return false;

curl_setopt($s, CURLOPT_URL, $options[‘url’]);

curl_setopt($s, CURLOPT_HTTPHEADER, $options[‘headers’]);

curl_setopt($s, CURLOPT_SSL_VERIFYPEER, $options[‘ssl_verifypeer’]);

curl_setopt($s, CURLOPT_SSL_VERIFYHOST, $options[‘ssl_verifyhost’]);

curl_setopt($s, CURLOPT_TIMEOUT, $options[‘timeout’]);

curl_setopt($s, CURLOPT_MAXREDIRS, $options[‘max_redirects’]);

curl_setopt($s, CURLOPT_RETURNTRANSFER, true);

curl_setopt($s, CURLOPT_FOLLOWLOCATION, $options[‘follow_local’]);

curl_setopt($s, CURLOPT_COOKIEJAR, $options[‘cookie_location’]);

curl_setopt($s, CURLOPT_COOKIEFILE, $options[‘cookie_location’]);

if (!empty($options[‘auth_name’]) is_string($options[‘auth_name’]))

{

curl_setopt($s, CURLOPT_USERPWD, $options[‘auth_name’] . ‘:’ . $options[‘auth_pass’]);

}

if (!empty($options[‘post’]))

{

curl_setopt($s, CURLOPT_POST, true);

curl_setopt($s, CURLOPT_POSTFIELDS, $options[‘post’]);

//curl_setopt($s, CURLOPT_POSTFIELDS, array(‘username’ = ‘aeon’, ‘password’ = ‘111111’));

}

if ($options[‘include_header’])

{

curl_setopt($s, CURLOPT_HEADER, true);

}

if ($options[‘no_body’])

{

curl_setopt($s, CURLOPT_NOBODY, true);

}

if ($options[‘session’])

{

curl_setopt($s, CURLOPT_COOKIESESSION, true);

curl_setopt($s, CURLOPT_COOKIE, $options[‘session’]);

}

curl_setopt($s, CURLOPT_USERAGENT, $options[‘useragent’]);

curl_setopt($s, CURLOPT_REFERER, $options[‘referer’]);

$res = curl_exec($s);

$status = curl_getinfo($s, CURLINFO_HTTP_CODE);

curl_close($s);

return $res;

}

php獲取數據為什麼curl獲取不完整?而用file_get_contents能獲取完整?

因為,PHP CURL庫默認1024字節的長度不等待數據的返回,所以你那段代碼需增加一項配置:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Expect:’));

給你一個更全面的封裝方法:

function req_curl($url, $status = null, $options = array())

{

    $res = ”;

    $options = array_merge(array(

        ‘follow_local’ = true,

        ‘timeout’ = 30,

        ‘max_redirects’ = 4,

        ‘binary_transfer’ = false,

        ‘include_header’ = false,

        ‘no_body’ = false,

        ‘cookie_location’ = dirname(__FILE__) . ‘/cookie’,

        ‘useragent’ = ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1’,

        ‘post’ = array() ,

        ‘referer’ = null,

        ‘ssl_verifypeer’ = 0,

        ‘ssl_verifyhost’ = 0,

        ‘headers’ = array(

            ‘Expect:’

        ) ,

        ‘auth_name’ = ”,

        ‘auth_pass’ = ”,

        ‘session’ = false

    ) , $options);

    $options[‘url’] = $url;

    $s = curl_init();

    if (!$s) return false;

    curl_setopt($s, CURLOPT_URL, $options[‘url’]);

    curl_setopt($s, CURLOPT_HTTPHEADER, $options[‘headers’]);

    curl_setopt($s, CURLOPT_SSL_VERIFYPEER, $options[‘ssl_verifypeer’]);

    curl_setopt($s, CURLOPT_SSL_VERIFYHOST, $options[‘ssl_verifyhost’]);

    curl_setopt($s, CURLOPT_TIMEOUT, $options[‘timeout’]);

    curl_setopt($s, CURLOPT_MAXREDIRS, $options[‘max_redirects’]);

    curl_setopt($s, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($s, CURLOPT_FOLLOWLOCATION, $options[‘follow_local’]);

    curl_setopt($s, CURLOPT_COOKIEJAR, $options[‘cookie_location’]);

    curl_setopt($s, CURLOPT_COOKIEFILE, $options[‘cookie_location’]);

    if (!empty($options[‘auth_name’])  is_string($options[‘auth_name’]))

    {

        curl_setopt($s, CURLOPT_USERPWD, $options[‘auth_name’] . ‘:’ . $options[‘auth_pass’]);

    }

    if (!empty($options[‘post’]))

    {

        curl_setopt($s, CURLOPT_POST, true);

        curl_setopt($s, CURLOPT_POSTFIELDS, $options[‘post’]);

        //curl_setopt($s, CURLOPT_POSTFIELDS, array(‘username’ = ‘aeon’, ‘password’ = ‘111111’));

    }

    if ($options[‘include_header’])

    {

        curl_setopt($s, CURLOPT_HEADER, true);

    }

    if ($options[‘no_body’])

    {

        curl_setopt($s, CURLOPT_NOBODY, true);

    }

    if ($options[‘session’])

    {

        curl_setopt($s, CURLOPT_COOKIESESSION, true);

        curl_setopt($s, CURLOPT_COOKIE, $options[‘session’]);

    }

    curl_setopt($s, CURLOPT_USERAGENT, $options[‘useragent’]);

    curl_setopt($s, CURLOPT_REFERER, $options[‘referer’]);

    $res = curl_exec($s);

    $status = curl_getinfo($s, CURLINFO_HTTP_CODE);

    curl_close($s);

    return $res;

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/282995.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:06
下一篇 2024-12-22 08:06

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智能等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示“文件中含有宏,保存將導致宏不可用”的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • Java Thread.start() 執行幾次的相關問題

    Java多線程編程作為Java開發中的重要內容,自然會有很多相關問題。在本篇文章中,我們將以Java Thread.start() 執行幾次為中心,為您介紹這方面的問題及其解決方案…

    編程 2025-04-29

發表回復

登錄後才能評論