天气预报

本文介绍了一个使用C#编写的简单天气预报抓取程序。该程序通过网络爬虫技术从特定网站获取并解析天气信息,包括城市、日期、天气状况、温度、风力及光照情况等。代码详细展示了如何实现数据的抽取和格式化。

    /// <summary>
    /// 天气预报
    /// </summary>
    public class weather
    {
        #region 公共属性
        /// <summary>
        /// 城市
        /// </summary>
        public string City;
        /// <summary>
        /// 日期
        /// </summary>
        public string Date;
        /// <summary>
        /// 天气
        /// </summary>
        public string WeatherInfo;
        /// <summary>
        /// 温度
        /// </summary>
        public string Temperature;
        /// <summary>
        /// 风
        /// </summary>
        public string Wind;
        /// <summary>
        /// 光
        /// </summary>
        public string Light;

        #endregion 公共属性

        #region ==方法==
        /// <summary>
        /// 解析指定城市的天气
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        /// <returns></returns>
        public void PasreCityWeather(string cityWeatherPageText)
        {
            //解析时间
            this.ParseDate(cityWeatherPageText);
            //解析天气
            this.ParseWeather(cityWeatherPageText);
            //解析温度
            this.ParseTemperature(cityWeatherPageText);
            //解析风,光
            this.ParseWindAndLight(cityWeatherPageText);
        }
        public override string ToString()
        {
            //string LN = "/r/n";
            //string result = "南昌 日期:" + this.Date + LN;
            //result += "天气:" + this.WeatherInfo + LN;
            //result += "温度:" + this.Temperature + LN;
            //result += "风:" + this.Wind + LN;
            //result += "" + this.Light + LN;
             if (this.Temperature == "") this.Temperature = "4℃";

            string LN = "/r/n";
            string result = "南昌  "; //+ this.Date + LN;
            result += this.WeatherInfo + LN;
            result += this.Temperature + LN;
            return result;
        }
        #region 私有方法
        /// <summary>
        /// 解析时间
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseDate(string cityWeatherPageText)
        {
            this.Date = this.GetStringBetween(cityWeatherPageText, "<span class=/"big-cn/">", "</span>").Trim();
        }
        /// <summary>
        /// 解析天气
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseWeather(string cityWeatherPageText)
        {
            this.WeatherInfo = this.GetStringBetween(cityWeatherPageText, "class=/"weather/">", "</td>").Trim();
        }
        /// <summary>
        /// 解析温度
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseTemperature(string cityWeatherPageText)
        {
            this.Temperature = this.GetStringBetween(cityWeatherPageText, "class=/"weatheren/">", "</td>").Trim();
        }
        /// <summary>
        /// 解析风,光
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseWindAndLight(string cityWeatherPageText)
        {
            string windAndLight = this.GetStringBetween(cityWeatherPageText, "<td width=/"153/" valign=/"top/"><span class=/"big-cn/">", "</td>");
            this.Wind = this.GetStringBetween(windAndLight, "", "<br>").Trim();
            this.Light = this.GetStringBetween(windAndLight, "<br>", "</span>").Trim();
        }
        /// <summary>
        /// HTML解释
        /// </summary>
        /// <param name="sourceString">源字符串</param>
        /// <param name="startString">需要解释的字符串开头</param>
        /// <param name="endString">需要解释的字符串结尾</param>
        /// <returns></returns>
        private string GetStringBetween(string sourceString, string startString, string endString)
        {
            int startPos = sourceString.IndexOf(startString) + startString.Length;
            int endPos = sourceString.IndexOf(endString, startPos);
            string result = sourceString.Substring(startPos, endPos - startPos);
            return result;
        }
        #endregion 私有方法
        #endregion

}

 

/// <summary>
    ///  获取远程文件内容
    /// </summary>
    public class Spider
    {
        ArrayList alWeather = null;
        /// <summary>
        ///
        /// </summary>
        private string weatherSiteURL = @"http://weather.tq121.com.cn/";
        /// <summary>
        /// 城市查找
        /// </summary>
        private string cityWeatherURL = @"http://weather.tq121.com.cn/mapanel/index1.php?city=";
        #region 构造函数
        public Spider()
        {
            alWeather = new ArrayList();
            if (System.Configuration.ConfigurationSettings.AppSettings["weatherSiteUrl"] != null)
            {
                this.weatherSiteURL = System.Configuration.ConfigurationSettings.AppSettings["weatherSiteUrl"];
            }
            if (System.Configuration.ConfigurationSettings.AppSettings["cityWeatherURL"] != null)
            {
                this.cityWeatherURL = System.Configuration.ConfigurationSettings.AppSettings["cityWeatherURL"];
            }

        }
        #endregion 构造函数
        /// <summary>
        /// 取得指定城市的天气
        /// </summary>
        /// <param name="city"></param>
        /// <returns></returns>
        public weather GetWeather(string city)
        {
            string encodedCity = System.Web.HttpUtility.UrlEncode(city, System.Text.Encoding.Default);
            string url = this.cityWeatherURL + encodedCity;
            Console.WriteLine(url);
            string cityWeatherPageText = this.GetPageText(url);
            weather cityWeather = new weather();
            cityWeather.PasreCityWeather(cityWeatherPageText);
            return cityWeather;
        }
        /// <summary>
        /// 取得页面文本
        /// </summary>
        /// <returns></returns>
        private string GetPageText(string url)
        {
            WebClient wc = new WebClient();
            try
            {
                byte[] dataArray = wc.DownloadData(url);
                string weatherPageText = System.Text.Encoding.Default.GetString(dataArray);
                return weatherPageText;
            }
            catch (Exception ex)
            {
                throw new Exception("打开天气页面失败/r/n" + ex.Message);
            }
        }
    }

//调用示例:

  weather cityWeather = spider.GetWeather("南昌");
  s = cityWeather.ToString();

【激光质量检测】利用丝杆与步进电机的组合装置带动光源的移动,完成对光源使用切片法测量其光束质量的目的研究(Matlab代码实现)内容概要:本文研究了利用丝杆与步进电机的组合装置带动光源移动,结合切片法实现对激光光源光束质量的精确测量方法,并提供了基于Matlab的代码实现方案。该系统通过机械装置精确控制光源位置,采集不同截面的光强分布数据,进而分析光束的聚焦特性、发散角、光斑尺寸等关键质量参数,适用于高精度光学检测场景。研究重点在于硬件控制与图像处理算法的协同设计,实现了自动化、高重复性的光束质量评估流程。; 适合人群:具备一定光学基础知识和Matlab编程能力的科研人员或工程技术人员,尤其适合从事激光应用、光电检测、精密仪器开发等相关领域的研究生及研发工程师。; 使用场景及目标:①实现对连续或脉冲激光器输出光束的质量评估;②为激光加工、医疗激光、通信激光等应用场景提供可靠的光束分析手段;③通过Matlab仿真与实际控制对接,验证切片法测量方案的有效性与精度。; 阅读建议:建议读者结合机械控制原理与光学测量理论同步理解文档内容,重点关注步进电机控制逻辑与切片数据处理算法的衔接部分,实际应用时需校准装置并优化采样间距以提高测量精度。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值