最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實(shí)現(xiàn)采集中國天氣網(wǎng)未來7天天氣

 更新時(shí)間:2014年10月15日 12:53:12   投稿:junjie  
這篇文章主要介紹了PHP實(shí)現(xiàn)采集中國天氣網(wǎng)未來7天天氣方法,本文詳細(xì)的講解了需求的實(shí)現(xiàn),也可以做為學(xué)習(xí)PHP采集的入門教程,需要的朋友可以參考下

前言

我們?cè)趯懸粋€(gè)Web程序的時(shí)候,總會(huì)想著把自己的網(wǎng)站更美觀一些,功能能更多一些,有時(shí)候?qū)懸恍┬〉墓ぞ呋蛘呒由闲〉牟寮?huì)讓我們的站點(diǎn)更加完善。比如萬年歷功能,比如我們現(xiàn)在要講的天氣預(yù)報(bào)功能。

當(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ù)。

下面就介紹一下如何編寫一個(gè)簡(jiǎn)單的PHP數(shù)據(jù)采集程序(PHP爬蟲)。

原理

給定一個(gè)網(wǎng)頁的URL,使用PHP下載該網(wǎng)頁并得到網(wǎng)頁內(nèi)容,然后通過正則表達(dá)式將其中我們感興趣的數(shù)據(jù)提取出來,然后輸出。

具體在這個(gè)例子中,我們要抓取的網(wǎng)頁是 http://www.weather.com.cn/weather/101050101.shtml,我們感興趣的是頁面中的未來7天天氣情況。

實(shí)現(xiàn)

0.獲取天氣預(yù)報(bào)網(wǎng)頁的URL:

復(fù)制代碼 代碼如下:

$url = "http://www.weather.com.cn/weather/101050101.shtml";
$page_content = file_get_contents($url);

在這里,file_get_contents() 函數(shù)會(huì)將 $url 指向的網(wǎng)頁下載下來,并把網(wǎng)頁內(nèi)容作為一個(gè)字符串返回。于是,$page_content 變量中就是我們要抓取的網(wǎng)頁的全部HTML代碼了。接下來,我們要從其中抽取我們需要的數(shù)據(jù)。

1.使用正則表達(dá)式匹配符合條件的字符串

先輸出 $page_content 的值,然后查看網(wǎng)頁源代碼,觀察可知我們需要的字符串可以在

復(fù)制代碼 代碼如下:

<!--day 1 -->
......
<!--day 7 -->

這兩行的注釋里找到。

使用正則表達(dá)式來取得 <!--day 1--> 和 <!--day 7--> 之間的所有內(nèi)容:

復(fù)制代碼 代碼如下:

eregi("<!--day 1-->(.*)<!--day 7-->",$page_content,$res);

2.補(bǔ)全頁面中圖片的路徑

由于遠(yuǎn)程網(wǎng)頁中的圖片路徑都是像 /m2/i/icon_weather/29x20/d01.gif 這樣的相對(duì)路徑,我們需要把這些路徑補(bǔ)全,在它們前面加上 http://www.weather.com.cn。

復(fù)制代碼 代碼如下:

$forecast = str_replace("<img src="","<img src="http://www.weather.com.cn",$res[0]);

至此,$forecast 中就是我們需要的天氣預(yù)報(bào)信息了。這個(gè)簡(jiǎn)單的PHP爬蟲也就寫好了。

源代碼

以下是這個(gè)抓取天氣預(yù)報(bào)小程序的完整源代碼,其中添加了一些測(cè)量各部分程序運(yùn)行時(shí)間的代碼,并可以通過設(shè)置 $start 和 $end 的值來控制抓取哪幾天的信息。

復(fù)制代碼 代碼如下:

$url = "http://www.weather.com.cn/weather/101050101.shtml";
$t1 = time();
   
$page_content = file_get_contents($url);
$t2 = time();

$start = 1;
$end = 3;

if ($end > 7){
    echo "超出預(yù)報(bào)能力范圍,請(qǐng)重新設(shè)置!";
}else {
    echo "未來".($end-$start)."天哈爾濱的天氣預(yù)報(bào)("
              .date('Y-m-j')."發(fā)布)";

    eregi("--day $start--(.*)--day $end--", $page_content, $res);

    $forecast = str_replace("<img src=\"",
        "<img src=\"http://www.weather.com.cn", $res[0]);
    $t3 = time();

    echo $forecast;

    echo 'First step costs '.($t2 - $t1).' ms.';
    echo 'Last step costs '.($t3 - $t2).' ms.';
}

其他應(yīng)用例子

同樣的思路可以嘗試的有:NBA每天的比分牌、今日哈工大的新聞同步、股市行情等等。都能實(shí)現(xiàn)同步實(shí)時(shí)更新。暫時(shí)只想到這些,歡迎大家拍磚~

相關(guān)文章

  • PHP中cookie和session的區(qū)別實(shí)例分析

    PHP中cookie和session的區(qū)別實(shí)例分析

    這篇文章主要介紹了PHP中cookie和session的區(qū)別,比較詳盡的分析了二者從創(chuàng)建、運(yùn)用到清除的各個(gè)流程的注意事項(xiàng),需要的朋友可以參考下
    2014-08-08
  • Apache啟動(dòng)報(bào)錯(cuò)No space left on device: AH00023該怎么解決

    Apache啟動(dòng)報(bào)錯(cuò)No space left on device: AH00023該怎么解決

    最近有朋友說:Apache啟動(dòng)報(bào)錯(cuò)No space left on device: AH00023,是怎么回事,該怎么解決呢?經(jīng)過小編的一番折騰,問題解決,下面把解決辦法分享給大家,需要的朋友可以參考下
    2015-10-10
  • Yii框架關(guān)聯(lián)查詢with用法分析

    Yii框架關(guān)聯(lián)查詢with用法分析

    這篇文章主要介紹了Yii框架關(guān)聯(lián)查詢with用法,以實(shí)例形式較為詳細(xì)的分析了yii支持的四種類型關(guān)系的具體用法,是使用yii框架進(jìn)行關(guān)聯(lián)查詢時(shí)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • smarty自定義函數(shù)用法示例

    smarty自定義函數(shù)用法示例

    這篇文章主要介紹了smarty自定義函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了Smarty自定義函數(shù)的定義與使用技巧,需要的朋友可以參考下
    2016-05-05
  • Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼

    Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼

    今天小編就為大家分享一篇Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • php多文件打包下載的實(shí)例代碼

    php多文件打包下載的實(shí)例代碼

    本篇文章主要介紹了php多文件打包下載的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • php中is_null,empty,isset,unset 的區(qū)別詳細(xì)介紹

    php中is_null,empty,isset,unset 的區(qū)別詳細(xì)介紹

    本篇文章介紹了,php中is_null,empty,isset,unset 的區(qū)別詳細(xì)分析。需要的朋友參考下
    2013-04-04
  • yii2 url重寫并隱藏index.php方法

    yii2 url重寫并隱藏index.php方法

    這篇文章主要介紹了yii2 url重寫并隱藏index.php方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解PHP如何完成驗(yàn)證碼功能示例

    詳解PHP如何完成驗(yàn)證碼功能示例

    這篇文章主要介紹了PHP如何完成驗(yàn)證碼功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • PHP使用Nginx實(shí)現(xiàn)反向代理

    PHP使用Nginx實(shí)現(xiàn)反向代理

    這篇文章主要為大家詳細(xì)介紹了PHP使用Nginx實(shí)現(xiàn)反向代理的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論

苏尼特左旗| 水富县| 平谷区| 慈溪市| 柘荣县| 韶山市| 鄂州市| 宾阳县| 监利县| 江阴市| 宽城| 双江| 苗栗县| 惠来县| 开鲁县| 奇台县| 武强县| 泾川县| 旺苍县| 德惠市| 盐津县| 苏尼特右旗| 义乌市| 略阳县| 菏泽市| 德钦县| 兴和县| 石首市| 安多县| 顺平县| 肥东县| 东乌珠穆沁旗| 平原县| 萝北县| 曲阜市| 尚义县| 江安县| 蒲城县| 南皮县| 辽中县| 望奎县|