可以用以下4個(gè)方法來(lái)抓取網(wǎng)站 的數(shù)據(jù):

成都創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站制作、路南網(wǎng)絡(luò)推廣、微信小程序開(kāi)發(fā)、路南網(wǎng)絡(luò)營(yíng)銷(xiāo)、路南企業(yè)策劃、路南品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供路南建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:chinadenli.net
1. 用 file_get_contents 以 get 方式獲取內(nèi)容:
?
$url = '';
$html = file_get_contents($url);
echo $html;
2. 用fopen打開(kāi)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庫(kù),使用curl庫(kù)之前,可能需要查看一下php.ini是否已經(jīng)打開(kāi)了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;
簡(jiǎn)單的分了幾個(gè)步驟:
1、確定采集目標(biāo)
2、獲取目標(biāo)遠(yuǎn)程頁(yè)面內(nèi)容(curl、file_get_contents)
3、分析頁(yè)面html源碼,正則匹配你需要的內(nèi)容(preg_match、preg_match_all),這一步最為重要,不同頁(yè)面正則匹配規(guī)則不一樣
4、入庫(kù)
什么網(wǎng)頁(yè)數(shù)據(jù)?
是打開(kāi) 本地網(wǎng)頁(yè)還是打開(kāi)網(wǎng)上網(wǎng)頁(yè)
如果是本地網(wǎng)頁(yè)的話? 在瀏覽器上輸入127.0.0.1或者localhost進(jìn)行訪問(wèn)
如果是外網(wǎng)我理解的是你要獲取外網(wǎng)的一個(gè)網(wǎng)頁(yè),可以用代碼或者程序來(lái)實(shí)現(xiàn)
(一般稱(chēng)為采集程序,或者小偷程序)
//個(gè)人認(rèn)為curl好一點(diǎn),因?yàn)閏url可以模擬瀏覽器,有的網(wǎng)站會(huì)過(guò)濾機(jī)器人
//1.php代碼
//把網(wǎng)頁(yè)讀入一個(gè)字符串
$contone?=?file_get_contents('url');
print_r($contone);
//curl采集
#初始化curl??(true/false)
$ch=curl_init();
#請(qǐng)求url地址
$params[CURLOPT_URL]='網(wǎng)址';
#是否返回響應(yīng)頭信息
$params[CURLOPT_HEADER]?=?true;
#是否將結(jié)果返回
$params[CURLOPT_RETURNTRANSFER]?=?true;
#是否重定向
$params[CURLOPT_FOLLOWLOCATION]?=?true;
#偽造瀏覽器
$params[CURLOPT_USERAGENT]?=?'Mozilla/5.0?(Windows?NT?5.1;?rv:9.0.1)?Gecko/20100101?Firefox/9.0.1';
curl_setopt_array($ch,?$params);
$content=curl_exec($ch);
//輸出網(wǎng)頁(yè)內(nèi)容
print_r($content);
//下面是整個(gè)curl采集類(lèi)
class?Curl{
#采集的地址
public?$url;
#匹配的正則
public?$preg;
#模擬登錄需要的用戶(hù)名
public?$username;
#模擬登錄需要的密碼;
public?$pwd;
#cookie存儲(chǔ)的路徑
private?$cookie_path;
#采集數(shù)據(jù)的字符集
public?$charset;
/**
*?構(gòu)造方法,初始化采集基本信息
*?@param?$url??采集的url
*?@param?$preg?匹配的正則
*?@param?string?$username??用戶(hù)名
*?@param?string?$pwd??密碼
*?@param?string?$charset?字符集
*/
public?function?__construct($info){
extract($info);
$this-url=$url;
$this-preg=$preg;
if(isset($charset)){
header("content-type:text/html;charset=".$this-charset);
}else{
header("content-type:text/html;charset=utf-8");
}
if(isset($username)){
$this-username=$username;
}
if(isset($pwd)){
$this-pwd=$pwd;
}
}
/*
*?采集數(shù)據(jù),非表單提交方式,直接采集的
*/
public?function?get_info(){
#初始化curl
$ch=curl_init();
#請(qǐng)求url地址
$params[CURLOPT_URL]=$this-url;
#是否返回響應(yīng)頭信息
$params[CURLOPT_HEADER]?=?true;
#是否將結(jié)果返回
$params[CURLOPT_RETURNTRANSFER]?=?true;
#是否重定向
$params[CURLOPT_FOLLOWLOCATION]?=?true;
#偽造瀏覽器
$params[CURLOPT_USERAGENT]?=?'Mozilla/5.0?(Windows?NT?5.1;?rv:9.0.1)?Gecko/20100101?Firefox/9.0.1';
//判斷是否有cookie,有的話直接使用
//if?(isset($_COOKIE['cookie_jar'])?($_COOKIE['cookie_jar']?||?is_file($_COOKIE['cookie_jar']))){
//????$params[CURLOPT_COOKIEFILE]?=?$_COOKIE['cookie_jar'];?//這里判斷cookie
//}?else?{
//????$cookie_jar?=?tempnam($this-cookie_path,?'cookie');??????????????????//產(chǎn)生一個(gè)cookie文件
//????$params[CURLOPT_COOKIEJAR]?=?$cookie_jar;???????????????????????//寫(xiě)入cookie信息
//????setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑
//}
#開(kāi)始發(fā)送請(qǐng)求,傳入curl參數(shù)
curl_setopt_array($ch,?$params);
$content=curl_exec($ch);
preg_match_all($this-preg,$content,$arr);
return?$arr;
}
/**
*?采集遠(yuǎn)程圖片
*?@param?$img??圖片路徑??是一個(gè)數(shù)組
*?@param?$save_path???圖片保存在你本地的路徑
*?@return?bool
*/
public?function?get_img($img,$save_path){
for($i=0;$icount($img);$i++)?{
$res=@file_get_contents($img[$i]);
$img_type=substr($img[$i],?strrpos($img[$i],?"."));
$path=$save_path.time().rand(1,9999999).mt_rand()?.$img_type;
$img[$i]?=?$path;
file_put_contents($path,$res);
}
return?$img;
}
//登錄后采集
public?function?register_info(){
//采集的信息需要先登錄的就要先模擬登錄
//設(shè)置cookie保存路徑
$ch?=?curl_init();
//組裝用戶(hù)名和密碼
$info['username']?=?$this-username;
$info['password']?=?$this-pwd;
//模擬表單提交
$params[CURLOPT_URL]?=?$this-url;????//請(qǐng)求url地址
$params[CURLOPT_HEADER]?=?true;?//是否返回響應(yīng)頭信息
$params[CURLOPT_RETURNTRANSFER]?=?true;?//是否將結(jié)果返回
$params[CURLOPT_FOLLOWLOCATION]?=?true;?//是否重定向
$params[CURLOPT_USERAGENT]?=?'Mozilla/5.0?(Windows?NT?5.1;?rv:9.0.1)?Gecko/20100101?Firefox/9.0.1';
$postfields?=?'';
//將表單要提交的數(shù)據(jù)編程URL拼接方式
foreach?($info?as?$key?=?$value){
$postfields?.=?urlencode($key)?.?'='?.?urlencode($value)?.?'';
}
$params[CURLOPT_POST]?=?true;
$params[CURLOPT_POSTFIELDS]?=?$postfields;
//判斷是否有cookie,有的話直接使用
if?(isset($_COOKIE['cookie_jar'])($_COOKIE['cookie_jar']||is_file($_COOKIE['cookie_jar']))){
$params[CURLOPT_COOKIEFILE]?=?$_COOKIE['cookie_jar'];?//這里判斷cookie
}else{
$cookie_jar?=?tempnam($this-cookie_path,?'cookie');?//產(chǎn)生一個(gè)cookie文件
$params[CURLOPT_COOKIEJAR]?=?$cookie_jar;?//寫(xiě)入cookie信息
setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑
}
curl_setopt_array($ch,?$params);?//傳入curl參數(shù)
$content?=?curl_exec($ch);?//執(zhí)行
return?$content;
}
}
簡(jiǎn)單的有個(gè)file_get_content函數(shù),然后寫(xiě)正則規(guī)則匹配內(nèi)容,存數(shù)據(jù)庫(kù)。
如果需要登陸的,用curl,還有可以用PHP的DOM庫(kù)替換正則表達(dá)式
Python和Java等都有beautifulsoup這個(gè)第三方庫(kù),用來(lái)采集非常棒
用fopen/file/file_get_contents/curl之類(lèi)的函數(shù)將遠(yuǎn)程頁(yè)面獲得內(nèi)容, 采用正則或過(guò)濾之類(lèi)的獲得自己所需要的東西, 最好寫(xiě)入相應(yīng)的數(shù)據(jù)庫(kù)保存起來(lái)。
網(wǎng)站題目:php怎么采集網(wǎng)站數(shù)據(jù),自動(dòng)采集網(wǎng)站php源碼
當(dāng)前鏈接:http://chinadenli.net/article37/dseghsj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、微信小程序、網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)