首页 > 代码库 > java扒取天气网站的数据

java扒取天气网站的数据

1:由于天气apk接口不稳定所以经常获取不到信息。于是就动手写一个扒取天气网站上的数据然后做成json,apk直接调用服务器上扒取的数据增加稳定性。

2:项目主要是用servlet然后正则表达式来提取网站信息。

3:我觉得比较难得地方就是如何写正确的正则来提取出需要的信息,以下记录每个接口中需要的正则

3.1

获取页面省份的编号

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

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

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

}



3.2获取城市的编号

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

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

}

3.3获取县城编号

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

return getKeyValues(page, "<a href=http://www.mamicode.com/"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项目的完成效果。我就不一一贴出代码了。需要的留言吧

java扒取天气网站的数据