IP得到天气预报(1)———数据分析存储

  • 最近几天,突发奇想,打算自己做个喜欢的天气预报系统,每每浏览网页,可以得到根据IP地址的变化而的到不同城市的天气。经过2天的努力和尝试,总算是小有一点进展。其中涉及到的主要有:
  1. HTML代码分析,得到所有的网站不提供的全部每个城市的拼音和区位码。
  2. IP地址计算,并且,从数据库得到拼音和城市名字。
  3. XML代码的分析和DATA部分的肢解,得到XML中不提供的官方数据的及时显示。
  4. 制作自己的RSS订阅服务。
  • 先看看效果或者预览:地址

  

  • 思路:访问页面--->得到访问者IP--->IP地址计算成整数--->然后从数据库中得到IP对应的城市,城市拼音--->分析HTML提取雅虎天气中的数据--->通过拼音得到CODE地区吗--->然后再分析XML和HTML得到想要的内容。
  • 首先,必须找一个能够提供服务的网站。我找到了雅虎天气。简单介绍下,这个天气需要自己输入城市的拼音,然后跳转到相应的页面。比如以我北京为例子,输入Beijing,得到beijing在雅虎天气中规定的代码,CHXX0008。根据我现有的从网上找到的,一个是IP地址和城市的省会的,另一个表格是省会城市和城市拼音的。所以必须得到code才可以得到天气。
  • http://weather.yahoo.com/regional/CHXX.html 这个页面中,我们可以看见所有的城市列表是很有规律的。我们可以异步的访问通过HTMLDocument得到每一个字母下面的列表中每一个链接所对行的地址。然后分析地址,就可以提出出来,城市名字的拼音和CHXX后面的那个代码了。
  • 这个需要一个WinForm程序。委托一个事件异步的处理发生的事件。

  

  • 
    
    Code
    private void Form1_Load(object sender, EventArgs e)
    {
    string aUilA = "http://weather.yahoo.com/regional/CHXX.html";
    string aUrl = string.Empty;
    aUrl
    = aUilA;
    Uri aUri
    = new Uri(aUrl);
    WebBrowser aBrowser
    = new WebBrowser();
    aBrowser.DocumentCompleted
    += new WebBrowserDocumentCompletedEventHandler(OnListCompleted);
    aBrowser.Url
    = aUri;
    }
  • 仔细阅读HTML中的代码,可以发现,所有的href中存储的是我们需要的链接地址,而我们如和能定位到呢?发现li中列出来的是所有的链接,后前面有个ID刚好对应这个li的所有内容。通过HtmlElement中的GetElementById()直接定位到想要的ID。之后再逐步的分析li,循环提取,就可以把所有的名字和链接对应提取到一个数组中了。直接存到自己的数据库中。
  • using (WebBrowser aBrowser = sender as WebBrowser)
    {
    if (aBrowser != null)
    {
    HtmlDocument aDoc
    = aBrowser.Document;
    HtmlElement aListE
    = aDoc.GetElementById("*****");//分析定位位置
    HtmlElementCollection aCol
    = aListE.GetElementsByTagName("li");
    foreach (HtmlElement aDataItem in aCol)
    {
    try
    {
    //此处用来分析处理对应的HTML代码。

    //循环处理得到结果
    //
    //
    string nameCN = aLink.InnerHtml;
    CreateNewCode(codeCH, nameCN);
    }
    catch (Exception ex)
    { }
    }
    }
  • 提取的结果就如下了。大概有500条记录吧。
    
    
  • 总结:基本关于数据的提取就啰嗦这么多吧。关于网上的数据源存储了IP地址和城市的,随便可以找。我找到的是一个Access版本的。那么下面说的是IP地址计算和提取部分。
  • 简单加个链接目录,有兴趣的可以一起研究下:)
  • IP得到天气预报(1)———数据分析存储
  • IP得到天气预报(2)———IP运算和数据处理
  • IP得到天气预报(3)———XML中CDATA的提取
  • IP得到天气预报(4)———制作自己的RSS订阅
posted @ 2008-11-19 16:09  AlexLiu  阅读(1473)  评论(2编辑  收藏  举报