Java 网页 读取 解析 java天气预报

1.解析页面 http://www.baidu.com/more/ 

Java 网页 读取 解析 java天气预报_第1张图片

a.获取所有服务名称:

package com.siqi.samples;

import com.siqi.htmlparser.HtmlParser;
import com.siqi.htmlparser.Tag;
import com.siqi.htmlparser.WebUtils;

public class TestWebPage {
  public static void main(String... args) {
    
    
    try {
      //获取网页
      WebUtils webUtil = new WebUtils();
      webUtil.processUrl("http://www.baidu.com/more/");
      //解析网页
      HtmlParser parser = new HtmlParser(webUtil.getWebContent(),webUtil.getCharset());
      parser.parse();

      //打印网页标签路径为"html/body/div/div/div/div/h3"的内容
      String values = "";
      for(String str : parser.getTagValues("html/body/div/div/div/div/h3")) {
        values = values + str + " ";
      }
      System.out.println(values);
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }
}
结果:

新上线新! 搜索服务 导航服务 社区服务 游戏娱乐 移动服务 站长与开发者服务 软件工具 其他服务 


b.获取所有产品名称:

代码:

package com.siqi.samples;

import com.siqi.htmlparser.HtmlParser;
import com.siqi.htmlparser.Tag;
import com.siqi.htmlparser.WebUtils;

public class TestWebPage {
  public static void main(String... args) {
    
    
    try {
      //获取网页
      WebUtils webUtil = new WebUtils();
      webUtil.processUrl("http://www.baidu.com/more/");
      //解析网页
      HtmlParser parser = new HtmlParser(webUtil.getWebContent(),webUtil.getCharset());
      parser.parse();

      //打印网页标签路径为"html/body/div/div/div/div/div/div/a"的内容
      String values = "";
      for(String str : parser.getTagValues("html/body/div/div/div/div/div/div/a")) {
        values = values + str + " ";
      }
      System.out.println(values);
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }
}

结果:

 百度认证  百度壁纸  百度桌面  百度魔图  百度一键Root  网页  视频  音乐  地图  新闻  图片  词典  常用搜索  hao123  网站导航  百度团购  文库  空间  百科  贴吧  知道  搜藏  经验  百度阅读  百度身边  百度旅游  百度新知  百度相册  百度校园  百度游戏  百度应用  悠洋游戏  移动搜索  掌上百度  手机输入法  百度搜索  百度手机浏览器  百度移动应用  百度手机地图  百度云智能终端平台  百度通讯录  百度网盘  搜索开放平台  站长平台  百度统计  百度联盟  百度推广  广告管家  数据研究中心  风云榜  百度指数  百度分享  百度开发者中心  百度移动统计  百度浏览器  百度影音  百度hi  百度工具栏  百度阅读器  百度输入法  千千静听  百度翻译  百度寻人  百度公益  百度基金会  盲道  老年搜索  专利搜索  百付宝  百度营销大学  天空软件  百度房产 


2.htmlparser包

写这个包主要是想写一个天气预报的程序,主要通过抓取中国天气预报网http://www.weather.com.cn/weather/101010100.shtml网页上的内容,但是在获取网页的内容后,从代码中找到我想要的内容很麻烦。刚开始想用xml的解析器,比如dom4j,但是很多网页的标签都不是标准的xhtml,有些标签关闭,有些标签没有关闭,导致解析不正常。所以只能自己写个解析器。为了能够快速的解析出我想要的内容:比如 天气,日期,温度,生活指数等等。我将每个标签Tag都设置了一个标签路径tagPath。

什么是tagPath呢?

对于一个简单的网页:

<html>
  <title>This is a title</title>
  <body>This is body</body>
</html>

标题title的tagPath为 "html/title",

正文body的tagPath为 "html/body"

整篇网页的tagPath为 "html"。

在想获取标题的值的时候,只需要调用getTagValue("html/title"); 这样,无疑会使程序简单很多。


所以我写了一个简单的htmlparser包,通过这个包能很快的解析出网页内容。就向上面演示的代码一样。


3.如何使用htmlparser包

例如我们想获取http://www.weather.com.cn/weather/101010100.shtml 上的天气预报,日期,温度,风向等

1.首先打印所有标签的tagPath

package com.siqi.samples;

import com.siqi.htmlparser.HtmlParser;
import com.siqi.htmlparser.Tag;
import com.siqi.htmlparser.WebUtils;

public class TestWebPage {
  public static void main(String... args) {
    
    
    try {
      //获取网页
      WebUtils webUtil = new WebUtils();
      webUtil.processUrl("http://www.weather.com.cn/weather/101010100.shtml");
      //解析网页
      HtmlParser parser = new HtmlParser(webUtil.getWebContent(),webUtil.getCharset());
      parser.parse();

      
      //如果浏览所有标签的path和attribute
      for(Tag tag : parser.getTags()) {
        System.out.println(tag);
      }
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }
}

结果:

......

Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=12日星期六, class=cyclePrediction, title=农历十二月初一(三九第五天)]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue=]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=夜间, width=12%, style=background:#f4f7fc;]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=
              , width=10%]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                , href=http://www.weather.com.cn/static/html/legend.shtml, target=_blank]
Tag [tagType=SelfCTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/img, tagName=img, tagValue=
              , src=/m2/i/icon_weather/29x20/n01.gif]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue=
            ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=, width=18%]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=多云转晴, target=_blank]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue=]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=
              , width=15%]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                , href=http://baike.weather.com.cn/index.php?doc-view-1148.php, target=_blank]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/span, tagName=span, tagValue=低温 ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/span/strong, tagName=strong, tagValue=-7℃]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/span, tagName=strong, tagValue=]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=span, tagValue=
              ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue=
            ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=
              , width=15%]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                无持续风向
              , href=http://baike.weather.com.cn/index.php?doc-view-778.php, target=_blank]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue=
            ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
            ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=
              , width=15%]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                微风
              , href=http://baike.weather.com.cn/index.php?doc-view-778.php, target=_blank]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=a, tagValue= 
            ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=td, tagValue=
          ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div/table, tagName=tr, tagValue=
          ]
Tag [tagType=CloseTag, tagPath=html/body/input/div/div/div/div/div, tagName=table, tagValue=
                       
                   
                   
                   
          ]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table, tagName=table, tagValue=
          , class=yuBaoTable, width=100%, border=0, cellspacing=0, cellpadding=0]
Tag [tagType=StartTag, tagPath=html/body/input/div/div/div/div/div/table/tr, tagName=tr, tagValue=
            ]
......
前后省略了其他内容。

对于上面显示的tag,我们感兴趣的内容是:

tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=12日星期六

tagPath=html/body/input/div/div/div/div/div/table/tr/td, tagName=td, tagValue=夜间
tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=多云转晴
tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/span, tagName=span, tagValue=低温
tagPath=html/body/input/div/div/div/div/div/table/tr/td/a/span/strong, tagName=strong, tagValue=-7℃
tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                无持续风向
tagPath=html/body/input/div/div/div/div/div/table/tr/td/a, tagName=a, tagValue=
                微风
所以,要获取这些值的话,我们需要获取调用他们共有的tagPath

html/body/input/div/div/div/div/div/table/tr/td/
代码:

package com.siqi.samples;

import com.siqi.simplehtmlparser.HtmlParser;
import com.siqi.simplehtmlparser.Tag;
import com.siqi.simplehtmlparser.WebUtils;

public class TestWebPage {
  public static void main(String... args) {
    
    
    try {
      WebUtils webUtil = new WebUtils();
      webUtil.processUrl("http://www.weather.com.cn/weather/101010100.shtml");
      //System.out.println(webUtil.getWebContent());
      HtmlParser parser = new HtmlParser(webUtil.getWebContent(),webUtil.getCharset());
      parser.parse();
      
      for(String str : parser.getTagValues("html/body/input/div/div/div/div/div/table/tr/td")) {
        System.out.println(str);
      }
      
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }
}
结果:

12日星期六
夜间

多云转晴
低温-7℃
无持续风向
微风
13日星期日
白天

晴
高温3℃
无持续风向
微风
夜间

晴
低温-6℃
无持续风向
微风
14日星期一
白天

阴
高温4℃
无持续风向
微风
夜间

阴
低温-4℃
无持续风向
微风
15日星期二
白天

阴
高温6℃
北风
3-4级
夜间

晴
低温-6℃
无持续风向
微风
16日星期三
白天

晴
高温5℃
无持续风向
微风
夜间

晴
低温-8℃
无持续风向
微风
17日星期四
白天

晴
高温5℃
无持续风向
微风
夜间

晴
低温-7℃
无持续风向
微风
18日星期五
白天

晴
高温6℃
无持续风向
微风

下一篇写个完整的天气预报程序。


本文中htmlparser的源码和使用例子:

http://download.csdn.net/detail/wssiqi/4985998


你可能感兴趣的:(java,java,java,天气预报,html解析,java解析网页内容)