可以用以下4個方法來抓取網(wǎng)站 的數(shù)據(jù):
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊、虛擬空間、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
1. 用 file_get_contents 以 get 方式獲取內(nèi)容:
?
$url = '';
$html = file_get_contents($url);
echo $html;
2. 用fopen打開url,以get方式獲取內(nèi)容
?
$url = '';
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
$result = '';
while(!feof($fp))
{
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);
3. 用file_get_contents函數(shù),以post方式獲取url
?
$data = array(
'foo'='bar',
'baz'='boom',
'site'='',
'name'='nowa magic');
$data = http_build_query($data);
//$postdata = http_build_query($data);
$options = array(
'http' = array(
'method' = 'POST',
'header' = 'Content-type:application/x-www-form-urlencoded',
'content' = $data
//'timeout' = 60 * 60 // 超時(shí)時(shí)間(單位:s)
)
);
$url = "";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;
4、使用curl庫,使用curl庫之前,可能需要查看一下php.ini是否已經(jīng)打開了curl擴(kuò)展
$url = '';
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
訪問需要采集的頁面,如果數(shù)據(jù)是用js輸出的html,那么必定有接口或者本身頁面中給js提供了數(shù)據(jù),來遍歷輸出html。
用chrome的審查元素中的network,可以單獨(dú)看xhr,看看是否是ajax請求的接口,如果數(shù)據(jù)是從接口來的,直接用PHP去獲取那個接口的數(shù)據(jù)就可以了。
如果沒有ajax請求,查看html源代碼,在里面找數(shù)據(jù)。
這個需要配合js,打開一個html頁面,首先js用ajax請求頁面,返回第一個頁面信息確定處理完畢(ajax有強(qiáng)制同步功能),ajax再訪問第二個頁面。(或者根據(jù)服務(wù)器狀況,你可以同時(shí)提交幾個URL,跑幾個相同的頁面)
參數(shù)可以由js產(chǎn)生并傳遞url,php后臺頁面根據(jù)URL抓頁面。然后ajax通過php,在數(shù)據(jù)庫或者是哪里設(shè)一個標(biāo)量,標(biāo)明檢測到哪里。由于前臺的html頁面執(zhí)行多少時(shí)候都沒問題,這樣php的內(nèi)存限制和執(zhí)行時(shí)間限制就解決了。
因?yàn)椴粫速M(fèi)大量的資源用一個頁面來跑一個瞬間500次的for循環(huán)了。(你的500次for循環(huán)死了原因可能是獲取的數(shù)據(jù)太多,大過了php限制的內(nèi)存)
不過印象中curl好像也有強(qiáng)制同步的選項(xiàng),就是等待一個抓取后再執(zhí)行下一步。但是這個500次都是用一個頁面線程處理,也就是說肯定會遠(yuǎn)遠(yuǎn)大于30秒的默認(rèn)執(zhí)行時(shí)間。