码迷,mamicode.com
首页 > 编程语言 > 详细

java扒取天气网站的数据

时间:2014-11-14 15:57:54      阅读:231      评论:0      收藏:0      [点我收藏+]

标签: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

bubuko.com,布布扣项目的完成效果。我就不一一贴出代码了。需要的留言吧

java扒取天气网站的数据

标签:java 扒取 天气数据

原文地址:http://sw3458856.blog.51cto.com/6499064/1576373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!