php網(wǎng)頁抓取數(shù)據(jù)處理 php抓取網(wǎng)頁圖片

PHP抓取網(wǎng)頁指定內(nèi)容

?php

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的馬村網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

/*

* 如下: 方法有點(diǎn)笨

* 抓取網(wǎng)頁內(nèi)容用 PHP 的正則

* 用JS每隔5分鐘刷新當(dāng)前頁面---即重新獲取網(wǎng)頁內(nèi)容

*

* 注: $mode中--title/title-更改為所需內(nèi)容(如 $mode = "#a(.*)/a#";獲取所有鏈接)

*

* window.location.href="";中的

* 更改為自己的URL----作用:即刷新當(dāng)前頁面

*

* setInterval("ref()",300000);是每隔300000毫秒(即 5 * 60 *1000 毫秒即5分鐘)執(zhí)行一次函數(shù) ref()

*

* print_r($arr);輸出獲得的所有內(nèi)容 $arr是一個(gè)數(shù)組 可根據(jù)所需輸出一部分(如 echo $arr[1][0];)

* 若要獲得所有內(nèi)容 可去掉

* $mode = "#title(.*)/title#";

if(preg_match_all($mode,$content,$arr)){

print_r($arr);

echo "br/";

echo $arr[1][0];

}

再加上 echo $content;

*/

$url = ""; //目標(biāo)站

$fp = @fopen($url, "r") or die("超時(shí)");

$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

phpstudy怎么抓取網(wǎng)頁數(shù)據(jù)

什么網(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();

#請(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)頁內(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();

#請(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;???????????????????????//寫入cookie信息

//????setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑

//}

#開始發(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();

//組裝用戶名和密碼

$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;?//寫入cookie信息

setcookie('cookie_jar',?$cookie_jar);?//保存cookie路徑

}

curl_setopt_array($ch,?$params);?//傳入curl參數(shù)

$content?=?curl_exec($ch);?//執(zhí)行

return?$content;

}

}

使用PHP的cURL庫進(jìn)行網(wǎng)頁抓取

使用PHP的cURL庫可以簡單和有效地去抓網(wǎng)頁 你只需要運(yùn)行一個(gè)腳本 然后分析一下你所抓取的網(wǎng)頁 然后就可以以程序的方式得到你想要的數(shù)據(jù)了 無論是你想從從一個(gè)鏈接上取部分?jǐn)?shù)據(jù) 或是取一個(gè)XML文件并把其導(dǎo)入數(shù)據(jù)庫 那怕就是簡單的獲取網(wǎng)頁內(nèi)容 cURL 是一個(gè)功能強(qiáng)大的PHP庫 本文主要講述如果使用這個(gè)PHP庫

啟用 cURL 設(shè)置

首先 我們得先要確定我們的PHP是否開啟了這個(gè)庫 你可以通過使用php_info()函數(shù)來得到這一信息

﹤?phpphpinfo();?﹥

如果你可以在網(wǎng)頁上看到下面的輸出 那么表示cURL庫已被開啟

如果你看到的話 那么你需要設(shè)置你的PHP并開啟這個(gè)庫 如果你是在Windows平臺(tái)下 那么非常簡單 你需要改一改你的php ini文件的設(shè)置 找到php_curl dll 并取消前面的分號(hào)注釋就行了 如下所示

//取消下在的注釋extension=php_curl dll

如果你是在Linux下面 那么 你需要重新編譯你的PHP了 編輯時(shí) 你需要打開編譯參數(shù)——在configure命令上加上 –with curl 參數(shù)

一個(gè)小示例

如果一切就緒 下面是一個(gè)小例程

﹤?php// 初始化一個(gè) cURL 對(duì)象$curl = curl_init();

// 設(shè)置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );

// 設(shè)置headercurl_setopt($curl CURLOPT_HEADER );

// 設(shè)置cURL 參數(shù) 要求結(jié)果保存到字符串中還是輸出到屏幕上 curl_setopt($curl CURLOPT_RETURNTRANSFER );

// 運(yùn)行cURL 請(qǐng)求網(wǎng)頁$data = curl_exec($curl);

// 關(guān)閉URL請(qǐng)求curl_close($curl);

// 顯示獲得的數(shù)據(jù)var_dump($data);

如何POST數(shù)據(jù)

上面是抓取網(wǎng)頁的代碼 下面則是向某個(gè)網(wǎng)頁P(yáng)OST數(shù)據(jù) 假設(shè)我們有一個(gè)處理表單的網(wǎng)址// example /sendSMS php 其可以接受兩個(gè)表單域 一個(gè)是電話號(hào)碼 一個(gè)是短信內(nèi)容

﹤?php$phoneNumber = ;$message = This message was generated by curl and php ;$curlPost = pNUMBER= urlencode($phoneNumber) MESSAGE= urlencode($message) SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥

從上面的程序我們可以看到 使用CURLOPT_POST設(shè)置HTTP協(xié)議的POST方法 而不是GET方法 然后以CURLOPT_POSTFIELDS設(shè)置POST的數(shù)據(jù)

   關(guān)于代理服務(wù)器

下面是一個(gè)如何使用代理服務(wù)器的示例 請(qǐng)注意其中高亮的代碼 代碼很簡單 我就不用多說了

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 關(guān)于SSL和Cookie

關(guān)于SSL也就是HTTPS協(xié)議 你只需要把CURLOPT_URL連接中的//變成//就可以了 當(dāng)然 還有一個(gè)參數(shù)叫CURLOPT_SSL_VERIFYHOST可以設(shè)置為驗(yàn)證站點(diǎn)

關(guān)于Cookie 你需要了解下面三個(gè)參數(shù)

CURLOPT_COOKIE 在當(dāng)面的會(huì)話中設(shè)置一個(gè)cookie

CURLOPT_COOKIEJAR 當(dāng)會(huì)話結(jié)束的時(shí)候保存一個(gè)Cookie

CURLOPT_COOKIEFILE Cookie的文件

HTTP服務(wù)器認(rèn)證

最后 我們來看一看HTTP服務(wù)器認(rèn)證的情況

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )

$data = curl_exec();curl_close($ch);?﹥

關(guān)于其它更多的內(nèi)容 請(qǐng)參看相關(guān)的cURL手冊(cè) lishixinzhi/Article/program/PHP/201311/21491

如何利用php抓取網(wǎng)站動(dòng)態(tài)產(chǎn)生的數(shù)據(jù)

$url = "網(wǎng)站地址目錄";

$queryServer = curl_init();

curl_setopt($queryServer, CURLOPT_URL, $url);

curl_setopt($queryServer, CURLOPT_HEADER, 0);

curl_setopt($queryServer, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($queryServer, CURLOPT_RETURNTRANSFER, true);

curl_setopt($queryServer, CURLOPT_CONNECTTIMEOUT, 10);

curl_setopt($queryServer, CURLOPT_TIMEOUT, 30);

$html = curl_exec($queryServer);

$html = iconv('UTF-8','GBK//IGNORE',$html); //如果你需要是的數(shù)據(jù)是utf-8編碼的,這一行可以注銷,如果需要gbk編碼的,請(qǐng)保留.如果出現(xiàn)亂碼,就是一行的問題,你自己調(diào)著試吧

//echo $holder;exit; 此處可以輸出來測(cè)試.

$html = str_replace(array("\n","\r","\t"),"",$html);

$preg = '/table\s+width=\"800\"[^]+(.*?)\/table/';

preg_match_all($preg,$html,$out);

//匹配每行

preg_match_all('/tr[^]+(.*?)\/tr/',$out[1][0],$tr);

//匹配每個(gè)td

$result = array();

$match = '/td.+([^]+)\/td/U';

foreach( $tr[0] as $key = $value ){

preg_match_all($match,$value,$arr);

$result[] = $arr[1];

}

//輸出測(cè)試,$result就是你要的數(shù)據(jù),至于你要怎么輸出顯示格式,那就隨心調(diào)就好了。

foreach( $result as $key = $value ){

echo implode("\t",$value);

echo "br";

}

exit;

PHP怎樣抓取網(wǎng)頁代碼中動(dòng)態(tài)顯示的數(shù)據(jù)

PHP Simple HTML DOM或者phpQuery可以直接取得某些div中的內(nèi)容,里面有幾個(gè)例子專門針對(duì)于網(wǎng)頁抓取,調(diào)整好抓取頻次,舍去已經(jīng)存在的數(shù)據(jù),你可以參考下

;id=57class=2

PHP怎樣抓取網(wǎng)頁代碼中動(dòng)態(tài)(Ajax)顯示的數(shù)據(jù)

你是想抓別人網(wǎng)頁上ajax動(dòng)態(tài)載入的數(shù)據(jù)吧? 1、要找到它的ajax載入的URL地址 2、利用PHP的file_get_contents($url)函數(shù)讀取那個(gè)url地址。 3、對(duì)抓取到的內(nèi)容進(jìn)行分析或正則過濾。

網(wǎng)站名稱:php網(wǎng)頁抓取數(shù)據(jù)處理 php抓取網(wǎng)頁圖片
文章分享:http://muchs.cn/article32/hgidpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、關(guān)鍵詞優(yōu)化、電子商務(wù)網(wǎng)站維護(hù)、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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í)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)