java扒取天氣網站的數據

1:由於天氣apk接口不穩定所以經常獲取不到信息。於是就動手寫一個扒取天氣網站上的數據然後做成json,apk直接調用服務器上扒取的數據增加穩定性。

2:項目主要是用servlet然後正則表達式來提取網站信息。

3:我覺得比較難得地方就是如何寫正確的正則來提取出需要的信息,以下記錄每個接口中需要的正則

3.1

獲取頁面省份的編號

//page爲需要提取信息的源信息

public static Hashtable<String, String>parseProvincePage(String page){

return getKeyValues(page, "<a href=\"dis.do?.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=pid=)[0-9]+");

}



3.2獲取城市的編號

public static Hashtable<String,String>parseDitPage(String page){

return getKeyValues(page, "<a href=\"cout.do\\?.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=did=)[0-9]+");

}

3.3獲取縣城編號

public static Hashtable<String,String>parseCidPage(String page){

return getKeyValues(page, "<a href=\"index.do\\?cid=?.+?&pid=.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=cid=)[0-9]+(?=&)");

}

3.4

public static Hashtable<String, String> getKeyValues(String webPage,String tagRegex,String keyRegex,String valueRegex){

Hashtable<String,String>table=new Hashtable<String, String>();

for(String tag:getAllMathers(webPage,tagRegex)){

table.put(getMatcher(tag,keyRegex), getMatcher(tag, valueRegex));

}

return table;

}

3.5

7天詳情 

String regex="((?<=class=\"b\">)[\\s\\S]+?<br>[\\s\\S]+?(?=</))";

3.6 洗車指數

  return getAllMathers(html, "(?<=洗車指數]</span>).+?(?=<)");

3.7 城市的詳細天氣狀況

getAllMathers(detailHtml, "(?<=class=\"b\" id=\"\\w{9,15}\">).+?(?=<)|(?<=:).+?(?=<br>)");

4

項目主要的思路就是通過servlet來調用連接然後把信息保存在xml做緩存然後每小時查詢一下網站扒取下信息來更新緩存數據,然後客戶端就先查詢xml中有沒有緩存數據沒有再通知服務器扒取。


5

wKioL1Rlb0yRF7bpAAVEf09PXIs757.jpg項目的完成效果。我就不一一貼出代碼了。需要的留言吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章