从网站抓取天气预报的内容(找webservice没有找到免费的好使的)

前两天用c#写了一个从新浪网站上抓取天气预报的小程序,可以取得新浪网页上三天的天气预报,并存放在文本中。
开始取得网页老是乱码,后来折驣了好久才弄好,全部代码如下:
htmlagilitypack,在这里是用来处理HTML文档的,可以到http://www.codeplex.com/htmlagilitypack去下.
using System;

using System.Collections.Generic;

using System.Text;

using HtmlAgilityPack;

using System.IO;

using System.Net;

using System.Xml;

using System.Data;



namespace TestGet

{

    class Program

    {

        static void Main(string[] args)

        {



            string filetail = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString()

                + DateTime.Now.Day.ToString();

            string city = "北京";

            string result = ReadTxtFile(city, filetail);



            //Console.Read();

               



        }

        public static string ReadTxtFile(string city, string filetail)

        {

            if (File.Exists(@"d:/weather/weather_" + city + "_" + filetail + ".txt"))

            {

                StreamReader sr = File.OpenText(@"d:/weather/weather_" + city + "_" + filetail + ".txt");

                string str = sr.ReadToEnd();

                return str;

            }

            else

            {

                GetFile(city, filetail);

                CreatTxtFile(city, filetail);

                StreamReader sr = File.OpenText(@"d:/weather/weather_" + city + "_" + filetail + ".txt");

                string str = sr.ReadToEnd();

                return str;

            }

        }

        public static void CreatTxtFile(string city, string filetail)

        {

           

            FileStream fss = File.OpenRead(@"d:/weather/weather_" + city + "_" + filetail + ".html");

            HtmlDocument doc = new HtmlDocument();

            doc.Load(fss, Encoding.GetEncoding("gb2312"));

            HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes

                ("//div//div[@class='City_Data']|//div//div[@class='Weather_TP']|//div[@class='Weather_SM']");

            string weatherString = null;

            foreach (HtmlNode node in nodes)

            {

                weatherString += node.InnerHtml.ToString();



            }

            string w2 = weatherString.Replace("<p><span>", "/r");

            string w3 = w2.Replace("</p>", "");

            string w4 = w3.Replace("</span>", "");

            string w5 = w4.Replace(" ", "");

            string w6 = w5.Replace("<h3>", "");

            string w7 = w6.Replace("</h3>", "");

            string w8 = w7.Replace("<p>", "");

            Console.WriteLine(w8);

            FileStream fs = File.Create(@"d:/weather/weather_" + city + "_" + filetail + ".txt");

            StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("GB2312"));

            //sw.Encoding = Encoding.Unicode;

            sw.WriteLine(w8);

            sw.Flush();

            fs.Flush();

            sw.Close();

            fs.Close();



        }

        public static void GetFile(string city ,string filetail)

        {

            WebClient client= new WebClient();

            //client.DownloadFile("", "");

            // 要提交表单的URI字符串。

            string uriString = "http://php.weather.sina.com.cn/search.php";

            // 要提交的字符串数据。

            string postString = "city="+city;

            // 初始化WebClient

            WebClient webClient = new WebClient();

            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            // 将字符串转换成字节数组

            //得到"北京"这两个字的的GB2312编码

            byte[] postData = Encoding.GetEncoding("gb2312").GetBytes(postString);

            for (int i = 0; i < postData.Length; i++)

            {

                Console.WriteLine(postData[i].ToString());

            }

            // 上传数据,返回页面的字节数组

            byte[] responseData = webClient.UploadData(uriString, "POST", postData);

            // 返回的将字节数组转换成字符串(HTML)

            //按照GB2312格式读取字符节流转换成Unicode放在字符串中,因为string是Unicode类型的

            string srcString = Encoding.GetEncoding("GB2312").GetString(responseData);

            FileStream fs=File.OpenWrite(@"d:/weather/weather_" + city + "_" + filetail + ".html");

            //StreamWriter读出UNICODE的字符串后按GB2312写入HTML中

            //StreamWriter tw = new StreamWriter(fs, Encoding.GetEncoding("GB2312"));

            for (int i = 0; i < responseData.Length; i++)

            {

                fs.WriteByte(responseData[i]);

            }

            fs.Flush();

            fs.Close();

           

            

            //TextWriter tw = File.AppendText(@"d:/weather/weather_"+city +"_"+filetail+".html");

            //tw.Flush();

            //tw.Close();

           // Console.Read();

            //



        }

    }

}
 
//运行结果,会在文本里显示以下内容:

   今日 北京
   08年07月02日-03日;星期三
  多云转晴 23℃~35℃
  
污染指数:4,较差。气象条件较不利于空气污染物稀释、扩散和清除,请适当减少室外活动时间。  
紫外线指数:5,很强。紫外线辐射极强,建议涂擦SPF20以上、PA++的防晒护肤品,尽量避免暴露于日光下。  
舒适度指数:3,很不舒适。白天天气晴好,但烈日炎炎会使您会感到很热,很不舒适。  
体感指数:最低温度23&deg;C,最高温度35&deg;C  
防晒指数:5,极强。紫外辐射极强,外出时应特别加强防护,建议涂擦SPF20以上,PA++的防晒护肤品,并随时补涂。  
中暑指数:2,较易。气温较高,较易中暑,体质较弱的朋友请注意防暑降温,避免长时间在日光下暴晒或在高温环境中工作。  
穿衣指数:1,炎热。天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。  
空调指数:2,部分时间开启。您将感到些燥热,建议您在适当的时候开启制冷空调来降低温度,以免中暑。  
洗车指数:2,较适宜。较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。  
钓鱼指数:3,不宜。天气太热,不适合垂钓。 
   明日 北京
   08年07月03日-04日;星期四
  晴转雷阵雨 24℃~31℃
  
污染指数:2,良。气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。  
紫外线指数:2,弱。紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。  
舒适度指数:2,较不舒适。白天天气较热,虽然有雨,但仍然无法削弱较高气温给人们带来的暑意,这种天气会让您感到不很舒适。  
体感指数:最低温度25&deg;C,最高温度28&deg;C  
防晒指数:2,较弱。紫外线强度较弱,建议涂擦SPF在12-15之间,PA+的防晒护肤品。  
中暑指数:0,无。温度不高,其他各项气象条件适宜,中暑机率极低。  
穿衣指数:1,炎热。天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。  
空调指数:3,部分时间开启。天气热,到中午的时候您将会感到有点热,因此建议在午后较热时开启制冷空调。  
洗车指数:4,不宜。不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。  
钓鱼指数:2,较适宜。较适合垂钓,但天气稍热,会对垂钓产生一定的影响。 
   后天 北京
   08年07月04日-05日;星期五
  中雨转阵雨 22℃~29℃
  
污染指数:2,良。气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。  
紫外线指数:2,弱。紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。  
舒适度指数:1,较舒适。白天有降雨,但会使人们感觉有些热,不过大部分人仍会有比较舒适的感觉。  
体感指数:最低温度20&deg;C,最高温度28&deg;C  
防晒指数:2,较弱。紫外线强度较弱,建议涂擦SPF在12-15之间,PA+的防晒护肤品。  
中暑指数:0,无。温度不高,其他各项气象条件适宜,中暑机率极低。  
穿衣指数:2,热。天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。  
空调指数:4,较少开启。您将感到很舒适,一般不需要开启空调。  
洗车指数:4,不宜。不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。  
钓鱼指数:2,较适宜。较适合垂钓,但天气稍热,会对垂钓产生一定的影响。 





 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值