php抓取數(shù)據(jù) php 抓取別的網(wǎng)站的內(nèi)容

PHP生成和獲取XML格式數(shù)據(jù)

在做數(shù)據(jù)接口時 我們通常要獲取第三方數(shù)據(jù)接口或者給第三方提供數(shù)據(jù)接口 而這些數(shù)據(jù)格式通常是以XML或者JSON格式傳輸 本文將介紹如何使用PHP生成XML格式數(shù)據(jù)供第三方調(diào)用以及如何獲取第三方提供的XML數(shù)據(jù)

成都創(chuàng)新互聯(lián)公司從2013年成立,先為南部等服務(wù)建站,南部等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為南部企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

生成XML格式數(shù)據(jù)

我們假設(shè)系統(tǒng)中有一張學生信息表student 需要提供給第三方調(diào)用 并有id name sex age分別記錄學生的姓名 性別 年齡等信息

CREATE TABLE `student` (

`id` int( ) NOT NULL auto_increment

`name` varchar( ) NOT NULL

`sex` varchar( ) NOT NULL

`age` *** allint( ) NOT NULL default

PRIMARY KEY? (`id`)

) ENGINE=MyISAM? DEFAULT CHARSET=utf ;

首先 建立createXML php文件 先連接數(shù)據(jù)庫 獲取數(shù)據(jù)

include_once ( connect php ) //連接數(shù)據(jù)庫

$sql = select * from student ;

$result = mysql_query($sql) or die( Invalid query: mysql_error())

while ($row = mysql_fetch_array($result)) {

$arr[] = array(

name = $row[ name ]

sex = $row[ sex ]

age = $row[ age ]

}

這個時候 數(shù)據(jù)就保存在$arr中 你可以使用print_r打印下數(shù)據(jù)測試

接著 建立xml 循環(huán)數(shù)組 將數(shù)據(jù)寫入到xml對應的節(jié)點中

$doc = new DOMDocument( utf ) ? // 聲明版本和編碼

$doc formatOutput = true;

$r = $doc createElement( root )

$doc appendChild($r)

foreach ($arr as $dat) {

$b = $doc createElement( data )

$name = $doc createElement( name )

$name appendChild($doc createTextNode($dat[ name ]))

$b appendChild($name)

$sex = $doc createElement( sex )

$sex appendChild($doc createTextNode($dat[ sex ]))

$b appendChild($sex)

$age = $doc createElement( age )

$age appendChild($doc createTextNode($dat[ age ]))

$b appendChild($age)

$r appendChild($b)

}

echo $doc saveXML()

我們調(diào)用了PHP內(nèi)置的類DOMDocument來處理與生成xml 最終生成的xml格式請點擊這里看效果

?xml version= encoding= utf ?

root

data

name李王皓/name

sex男/sex

age /age

/data

/root

獲取XML格式數(shù)據(jù)

現(xiàn)在我們假設(shè)要從第三方獲取學生信息 數(shù)據(jù)格式是XML 我們需要使用PHP解析XML 然后將解析后的數(shù)據(jù)顯示或者寫入本地數(shù)據(jù)庫 而這里關(guān)鍵的一步是解析XML

PHP有很多中方法可以解析XML 其中PHP提供了內(nèi)置的XMLReader類可以循序地瀏覽過xml檔案的節(jié)點 你可以想像成游標走過整份文件的節(jié)點 并抓取需要的內(nèi)容 使用XMLReader是高效的 尤其是讀取非常大的xml數(shù)據(jù) 相對其他方法 使用XMLReader消耗內(nèi)存非常少

header( Content type:text/; Charset=utf )

$url = // helloweba /demo/importXML/createXML php ;

$reader = new XMLReader() ? //實例化XMLReader

$reader open($url) //獲取xml

$i= ;

while ($reader read()) {

if ($reader nodeType == XMLReader::TEXT) { //判斷node類型

$m = $i% ;

if($m== )

$name = $reader value;? //讀取node值

if($m== )

$sex = $reader value;

if($m== ){

$age = $reader value;

$arr[] = array(

name = $name

sex = $sex

age = $age

}

$i++;

}

}

//print_r($arr)

lishixinzhi/Article/program/PHP/201311/21636

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

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

php每天抓取數(shù)據(jù)并更新新

以前我用過querylist插件抓數(shù)據(jù),服務(wù)器寫和定時器,每天固定時間去運行腳本。朝這個方式試試

高并發(fā)下數(shù)據(jù)的更新,應該 update table xxx set num = num - 1 的方式,這種方式可以保證數(shù)據(jù)的正確性。

但是會出現(xiàn) num 為負數(shù)的問題,如果庫存為負數(shù),顯然是不合理的。

于是,需要將 num 字段設(shè)置為 無符號整型,這樣就不會出現(xiàn)負數(shù)了,因為,如果減到負數(shù),就會更新失敗。

但是這種依然會造成很多無用的更新語句的執(zhí)行,是不合理的。

于是,update table xxx set num = num - 1 where num 0,

這樣當 num 等于0之后就不會去更新數(shù)據(jù)庫了,減少了很多無用的開銷。

這種方式被稱作“樂觀鎖”

此外,對于搶紅包這種非整數(shù)的操作,我們應該轉(zhuǎn)換為整數(shù)的操作。

關(guān)于搶購超賣的控制

一般搶購功能是一個相對于正常售賣系統(tǒng)來說獨立的子系統(tǒng),這樣既可以防止搶購時的高并發(fā)影響到正常系統(tǒng),

也可以做到針對于搶購業(yè)務(wù)的特殊處理。

在后臺設(shè)計一些功能,可以就昂正常的商品加入到搶購活動中并編輯成為搶購商品,寫入到搶購商品表,當然

也可以把搶購商品表寫入redis而不是數(shù)據(jù)表。并且在原商品表寫入一個同樣的商品(id相同,用于訂單查看,

此商品不可購買)

如果是數(shù)據(jù)表,為了控制超賣,需要對表進行行鎖,更新的時候帶上 where goods_amount 0。

如果是redis,使用 hincrby 一個負數(shù)來減庫存,并且 hincrby 會返回改變后的值,再來判斷返回值是否大于0,

因為redis每個命令都是原子性的,這樣不用鎖表就可控制超賣。

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

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

啟用 cURL 設(shè)置

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

﹤?phpphpinfo();?﹥

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

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

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

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

一個小示例

如果一切就緒 下面是一個小例程

﹤?php// 初始化一個 cURL 對象$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 );

// 運行cURL 請求網(wǎng)頁$data = curl_exec($curl);

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

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

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

上面是抓取網(wǎng)頁的代碼 下面則是向某個網(wǎng)頁POST數(shù)據(jù) 假設(shè)我們有一個處理表單的網(wǎng)址// example /sendSMS php 其可以接受兩個表單域 一個是電話號碼 一個是短信內(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ù)器

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

﹤?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連接中的//變成//就可以了 當然 還有一個參數(shù)叫CURLOPT_SSL_VERIFYHOST可以設(shè)置為驗證站點

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

CURLOPT_COOKIE 在當面的會話中設(shè)置一個cookie

CURLOPT_COOKIEJAR 當會話結(jié)束的時候保存一個Cookie

CURLOPT_COOKIEFILE Cookie的文件

HTTP服務(wù)器認證

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

﹤?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)容 請參看相關(guān)的cURL手冊 lishixinzhi/Article/program/PHP/201311/21491

當前文章:php抓取數(shù)據(jù) php 抓取別的網(wǎng)站的內(nèi)容
轉(zhuǎn)載來于:http://muchs.cn/article18/doecdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、微信小程序、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司