可以用以下4個(gè)方法來抓取網(wǎng)站 的數(shù)據(jù):
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站制作、路南網(wǎng)絡(luò)推廣、微信小程序開發(fā)、路南網(wǎng)絡(luò)營銷、路南企業(yè)策劃、路南品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供路南建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
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;
簡單的分了幾個(gè)步驟:
1、確定采集目標(biāo)
2、獲取目標(biāo)遠(yuǎn)程頁面內(nèi)容(curl、file_get_contents)
3、分析頁面html源碼,正則匹配你需要的內(nèi)容(preg_match、preg_match_all),這一步最為重要,不同頁面正則匹配規(guī)則不一樣
4、入庫
什么網(wǎng)頁數(shù)據(jù)?
是打開 本地網(wǎng)頁還是打開網(wǎng)上網(wǎng)頁
如果是本地網(wǎng)頁的話? 在瀏覽器上輸入127.0.0.1或者localhost進(jìn)行訪問
如果是外網(wǎng)我理解的是你要獲取外網(wǎng)的一個(gè)網(wǎng)頁,可以用代碼或者程序來實(shí)現(xiàn)
(一般稱為采集程序,或者小偷程序)
//個(gè)人認(rèn)為curl好一點(diǎn),因?yàn)閏url可以模擬瀏覽器,有的網(wǎng)站會(huì)過濾機(jī)器人
//1.php代碼
//把網(wǎng)頁讀入一個(gè)字符串
$contone?=?file_get_contents('url');
print_r($contone);
//curl采集
#初始化curl??(true/false)
$ch=curl_init();
#請求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)頁內(nèi)容
print_r($content);
//下面是整個(gè)curl采集類
class?Curl{
#采集的地址
public?$url;
#匹配的正則
public?$preg;
#模擬登錄需要的用戶名
public?$username;
#模擬登錄需要的密碼;
public?$pwd;
#cookie存儲(chǔ)的路徑
private?$cookie_path;
#采集數(shù)據(jù)的字符集
public?$charset;
/**
*?構(gòu)造方法,初始化采集基本信息
*?@param?$url??采集的url
*?@param?$preg?匹配的正則
*?@param?string?$username??用戶名
*?@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();
#請求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;???????????????????????//寫入cookie信息
//????setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑
//}
#開始發(fā)送請求,傳入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();
//組裝用戶名和密碼
$info['username']?=?$this-username;
$info['password']?=?$this-pwd;
//模擬表單提交
$params[CURLOPT_URL]?=?$this-url;????//請求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;?//寫入cookie信息
setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑
}
curl_setopt_array($ch,?$params);?//傳入curl參數(shù)
$content?=?curl_exec($ch);?//執(zhí)行
return?$content;
}
}
簡單的有個(gè)file_get_content函數(shù),然后寫正則規(guī)則匹配內(nèi)容,存數(shù)據(jù)庫。
如果需要登陸的,用curl,還有可以用PHP的DOM庫替換正則表達(dá)式
Python和Java等都有beautifulsoup這個(gè)第三方庫,用來采集非常棒
用fopen/file/file_get_contents/curl之類的函數(shù)將遠(yuǎn)程頁面獲得內(nèi)容, 采用正則或過濾之類的獲得自己所需要的東西, 最好寫入相應(yīng)的數(shù)據(jù)庫保存起來。