PHP資料擷取程式採集天氣網資料執行個體示範

來源:互聯網
上載者:User


前言
我們在寫一個Web程式的時候,總會想著把自己的網站更美觀一些,功能能更多一些,有時候寫一些小的工具或者加上小的外掛程式會讓我們的網站更加完善。比如萬年曆功能,比如我們現在要講的天氣預報功能。

當然我們沒法利用專業的衛星接受資料,所以我們的天氣資料來自現有的天氣預報網站。利用天氣預報網站提供的資料服務,我們可以寫一個PHP爬蟲,然後動態採集我們所需要的資料,並且在目標網站更新資料的時候,我們的程式也能做到同步更新,自動地擷取資料。

下面就介紹一下如何編寫一個簡單的PHP資料擷取程式(PHP爬蟲)。

原理
給定一個網頁的URL,使用PHP下載該網頁並得到網頁內容,然後通過Regex將其中我們感興趣的資料提取出來,然後輸出。

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

實現
0.擷取天氣預報網頁的URL:

 代碼如下 複製代碼
$url = "http://www.天氣網com.cn/weather/101050101.shtml";
$page_content = file_get_contents($url);

在這裡,file_get_contents() 函數會將 $url 指向的網頁下載下來,並把網頁內容作為一個字串返回。於是,$page_content 變數中就是我們要抓取的網頁的全部HTML代碼了。接下來,我們要從其中抽取我們需要的資料。

1.使用Regex匹配合格字串
先輸出 $page_content 的值,然後查看網頁原始碼,觀察可知我們需要的字串可以在

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

這兩行的注釋裡找到。

使用Regex來取得 <!--day 1--> 和 <!--day 7--> 之間的所有內容:

 代碼如下 複製代碼

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

2.補全頁面中圖片的路徑
由於遠程網頁中的圖片路徑都是像 /m2/i/icon_weather/29x20/d01.gif 這樣的相對路徑,我們需要把這些路徑補全,在它們前面加上 http://www.天氣網com.cn。

 代碼如下 複製代碼

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

至此,$forecast 中就是我們需要的天氣預報資訊了。這個簡單的PHP爬蟲也就寫好了。

原始碼
以下是這個抓取天氣預報小程式的完整原始碼,其中添加了一些測量各部分程式已耗用時間的代碼,並可以通過設定 $start 和 $end 的值來控制抓取哪幾天的資訊。

 代碼如下 複製代碼


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

$start = 1;
$end = 3;

if ($end > 7){
    echo "超出預報能力範圍,請重新設定!";
}else {
    echo "未來".($end-$start)."天哈爾濱的天氣預報("
              .date('Y-m-j')."發布)";

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

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

    echo $forecast;

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.