十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
?php
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,六合企業(yè)網(wǎng)站建設,六合品牌網(wǎng)站建設,網(wǎng)站定制,六合網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,六合網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
/*
* 如下: 方法有點笨
* 抓取網(wǎng)頁內容用 PHP 的正則
* 用JS每隔5分鐘刷新當前頁面---即重新獲取網(wǎng)頁內容
*
* 注: $mode中--title/title-更改為所需內容(如 $mode = "#a(.*)/a#";獲取所有鏈接)
*
* window.location.href="";中的
* 更改為自己的URL----作用:即刷新當前頁面
*
* setInterval("ref()",300000);是每隔300000毫秒(即 5 * 60 *1000 毫秒即5分鐘)執(zhí)行一次函數(shù) ref()
*
* print_r($arr);輸出獲得的所有內容 $arr是一個數(shù)組 可根據(jù)所需輸出一部分(如 echo $arr[1][0];)
* 若要獲得所有內容 可去掉
* $mode = "#title(.*)/title#";
if(preg_match_all($mode,$content,$arr)){
print_r($arr);
echo "br/";
echo $arr[1][0];
}
再加上 echo $content;
*/
$url = ""; //目標站
$fp = @fopen($url, "r") or die("超時");
$content=file_get_contents($url);
$mode = "#title(.*)/title#";
if(preg_match_all($mode,$content,$arr)){
//print_r($arr);
echo "br/";
echo $arr[1][0];
}
?
script language="JavaScript" type="text/javascript"
--
function ref(){
window.location.href="";
}
setInterval("ref()",300000);
//--
/script
什么網(wǎng)頁數(shù)據(jù)?
是打開 本地網(wǎng)頁還是打開網(wǎng)上網(wǎng)頁
如果是本地網(wǎng)頁的話? 在瀏覽器上輸入127.0.0.1或者localhost進行訪問
如果是外網(wǎng)我理解的是你要獲取外網(wǎng)的一個網(wǎng)頁,可以用代碼或者程序來實現(xiàn)
(一般稱為采集程序,或者小偷程序)
//個人認為curl好一點,因為curl可以模擬瀏覽器,有的網(wǎng)站會過濾機器人
//1.php代碼
//把網(wǎng)頁讀入一個字符串
$contone?=?file_get_contents('url');
print_r($contone);
//curl采集
#初始化curl??(true/false)
$ch=curl_init();
#請求url地址
$params[CURLOPT_URL]='網(wǎng)址';
#是否返回響應頭信息
$params[CURLOPT_HEADER]?=?true;
#是否將結果返回
$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)頁內容
print_r($content);
//下面是整個curl采集類
class?Curl{
#采集的地址
public?$url;
#匹配的正則
public?$preg;
#模擬登錄需要的用戶名
public?$username;
#模擬登錄需要的密碼;
public?$pwd;
#cookie存儲的路徑
private?$cookie_path;
#采集數(shù)據(jù)的字符集
public?$charset;
/**
*?構造方法,初始化采集基本信息
*?@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;
#是否返回響應頭信息
$params[CURLOPT_HEADER]?=?true;
#是否將結果返回
$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)生一個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;
}
/**
*?采集遠程圖片
*?@param?$img??圖片路徑??是一個數(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(){
//采集的信息需要先登錄的就要先模擬登錄
//設置cookie保存路徑
$ch?=?curl_init();
//組裝用戶名和密碼
$info['username']?=?$this-username;
$info['password']?=?$this-pwd;
//模擬表單提交
$params[CURLOPT_URL]?=?$this-url;????//請求url地址
$params[CURLOPT_HEADER]?=?true;?//是否返回響應頭信息
$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';
$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)生一個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;
}
}
會用正則就會抓取。
不會正則,一時半會也教不錯。
不過,推薦你使用phpQuery這個框架,用jQuery的使用器來抓取數(shù)據(jù)。
簡單的分了幾個步驟:
1、確定采集目標
2、獲取目標遠程頁面內容(curl、file_get_contents)
3、分析頁面html源碼,正則匹配你需要的內容(preg_match、preg_match_all),這一步最為重要,不同頁面正則匹配規(guī)則不一樣
4、入庫
PHP Simple HTML DOM或者phpQuery可以直接取得某些div中的內容,里面有幾個例子專門針對于網(wǎng)頁抓取,調整好抓取頻次,舍去已經(jīng)存在的數(shù)據(jù),你可以參考下
;id=57class=2
用PHP自帶函數(shù)就可以實現(xiàn),首先要過去對方的網(wǎng)頁信息,用
file_get_contents();參數(shù)是對方的URL地址,這個函數(shù)返回是一個字符串你想要的東西就在這個字符串中了
接下來就可以針對這個字符串做處理了,說下思路,正如你這個問題想獲取到航班號起飛時間,在這個網(wǎng)頁中應該有很多相同的標簽元素,它們都有共同點,用
用正則表達式preg_match();或者是
preg_match_all();這兩個函數(shù)它們都返回一個數(shù)組,這個數(shù)組存的就是你要的航班號和起飛時間,那么相同信息的數(shù)組就會出現(xiàn)了,然后在對這個數(shù)組進行分析找到你要的某個值或全部的值
獲取信息要用到的3個函數(shù)是:
file_get_contents();
preg_match();
preg_match_all();