《PHP實(shí)例:PHP實(shí)現(xiàn)采集中國天氣網(wǎng)未來7天天氣》要點(diǎn):
本文介紹了PHP實(shí)例:PHP實(shí)現(xiàn)采集中國天氣網(wǎng)未來7天天氣,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
前言PHP實(shí)例
我們?cè)趯懸粋€(gè)Web程序的時(shí)候,總會(huì)想著把本身的網(wǎng)站更美觀一些,功能能更多一些,有時(shí)候?qū)懸恍┬〉墓ぞ呋蛘呒由闲〉牟寮?huì)讓我們的站點(diǎn)更加完善.比如萬年歷功能,比如我們現(xiàn)在要講的天氣預(yù)報(bào)功能.PHP實(shí)例
當(dāng)然我們沒法利用專業(yè)的衛(wèi)星接受數(shù)據(jù),所以我們的天氣數(shù)據(jù)來自現(xiàn)有的天氣預(yù)報(bào)網(wǎng)站.利用天氣預(yù)報(bào)網(wǎng)站提供的數(shù)據(jù)服務(wù),我們可以寫一個(gè)PHP爬蟲,然后動(dòng)態(tài)采集我們所必要的數(shù)據(jù),并且在目標(biāo)站點(diǎn)更新數(shù)據(jù)的時(shí)候,我們的程序也能做到同步更新,自動(dòng)地獲取數(shù)據(jù).PHP實(shí)例
下面就介紹一下如何編寫一個(gè)簡(jiǎn)單的PHP數(shù)據(jù)采集程序(PHP爬蟲).PHP實(shí)例
原理PHP實(shí)例
給定一個(gè)網(wǎng)頁的URL,使用PHP下載該網(wǎng)頁并得到網(wǎng)頁內(nèi)容,然后通過正則表達(dá)式將其中我們感興趣的數(shù)據(jù)提取出來,然后輸出.PHP實(shí)例
具體在這個(gè)例子中,我們要抓取的網(wǎng)頁是 http://www.weather.com.cn/weather/101050101.shtml,我們感興趣的是頁面中的未來7天天氣情況.PHP實(shí)例
實(shí)現(xiàn)PHP實(shí)例
0.獲取天氣預(yù)報(bào)網(wǎng)頁的URL:PHP實(shí)例
在這里,file_get_contents() 函數(shù)會(huì)將 $url 指向的網(wǎng)頁下載下來,并把網(wǎng)頁內(nèi)容作為一個(gè)字符串返回.于是,$page_content 變量中就是我們要抓取的網(wǎng)頁的全部HTML代碼了.接下來,我們要從其中抽取我們必要的數(shù)據(jù).PHP實(shí)例
1.使用正則表達(dá)式匹配符合條件的字符串PHP實(shí)例
先輸出 $page_content 的值,然后查看網(wǎng)頁源代碼,觀察可知我們必要的字符串可以在
PHP實(shí)例
使用正則表達(dá)式來取得 <!--day 1--> 和 <!--day 7--> 之間的所有內(nèi)容:
PHP實(shí)例
2.補(bǔ)全頁面中圖片的路徑PHP實(shí)例
由于遠(yuǎn)程網(wǎng)頁中的圖片路徑都是像 /m2/i/icon_weather/29x20/d01.gif 這樣的相對(duì)路徑,我們必要把這些路徑補(bǔ)全,在它們前面加上 http://www.weather.com.cn.
PHP實(shí)例
源代碼PHP實(shí)例
以下是這個(gè)抓取天氣預(yù)報(bào)小程序的完整源代碼,其中添加了一些測(cè)量各部門程序運(yùn)行時(shí)間的代碼,并可以通過設(shè)置 $start 和 $end 的值來控制抓取哪幾天的信息.PHP實(shí)例
$start = 1;
$end = 3;PHP實(shí)例
if ($end > 7){
??? echo "超出預(yù)報(bào)才能范圍,請(qǐng)重新設(shè)置!";
}else {
??? echo "未來".($end-$start)."天哈爾濱的天氣預(yù)報(bào)("
????????????? .date('Y-m-j')."發(fā)布)";PHP實(shí)例
??? eregi("--day $start--(.*)--day $end--", $page_content, $res);PHP實(shí)例
??? $forecast = str_replace("<img src=\"",
??????? "<img src=\"http://www.weather.com.cn", $res[0]);
??? $t3 = time();PHP實(shí)例
??? echo $forecast;PHP實(shí)例
??? echo 'First step costs '.($t2 - $t1).' ms.';
??? echo 'Last step costs '.($t3 - $t2).' ms.';
}
PHP實(shí)例
其他應(yīng)用例子PHP實(shí)例
同樣的思路可以測(cè)驗(yàn)考試的有:NBA每天的比分牌、今日哈工大的新聞同步、股市行情等等.都能實(shí)現(xiàn)同步實(shí)時(shí)更新.暫時(shí)只想到這些,歡迎大家拍磚~PHP實(shí)例
歡迎參與《PHP實(shí)例:PHP實(shí)現(xiàn)采集中國天氣網(wǎng)未來7天天氣》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/14540.html