zoukankan      html  css  js  c++  java
  • .net利用爬虫爬取中国天气网的天气信息

    1.首先需要添加引用Newtonsoft.Json.dll,这个可以直接从网上获取

    2.获取NuGet包HtmlAgilityPack 这是一个非常好用的解析html的工具

    3.下载城市编码的数据,下载地址是https://apip.weatherdt.com/float/static/js/city.js  该js直接打开可能会乱码,没关系,在页面上右键,另存为,将它变为txt文件,这时你会发现里面的东西不是乱码了。文件放在bin/debug下,可根据需求自行修改

    4.根据城市名称获取城市编码

    public string GetCityCode(string cityName)
            {
                //城市编码
                string code = "";
                //读取城市信息文件
                string filePath = AppDomain.CurrentDomain.BaseDirectory + "city.txt";
                FileStream fs = new FileStream(filePath, FileMode.Open);
                StreamReader sr = new StreamReader(fs);
                var json = sr.ReadToEnd();
                sr.Close();
                fs.Close();
    
                //将获取到的数据解析成json并直接获取第三级城市编码
                JArray jobject = (JArray)JsonConvert.DeserializeObject(json);
                for (int i = 0; i < jobject.Count; i++)
                {
                    var arr = (JArray)jobject[i]["children"];
                    for (int j = 0; j < arr.Count; j++)
                    {
                        var citys = (JArray)arr[j]["children"];
                        
                        for (int m = 0; m < citys.Count; m++)
                        {
                            if (citys[m]["zh"].ToString() == cityName)
                            {
                                code = citys[m]["id"].ToString();
                                break;
                            }
                        }
                        
    
                    }
    
                }
                return code;
            }
    

      

    5.获取关键数据

    public string InsertWeatherInfo2()
            {
                string result = "0";
                var city = ConfigurationManager.AppSettings["address"]; //解析地址取得想要的信息
                //解析html
                HtmlWeb webClient = new HtmlWeb();
                string cityCode = GetCityCode(city);
                if (cityCode != "")
                {
                    try
                    {
                        HtmlAgilityPack.HtmlDocument doc = webClient.Load("http://www.weather.com.cn/weather1d/" + cityCode + ".shtml");
                        var json = doc.DocumentNode.SelectSingleNode("//script[contains(text(), 'observe24h_data')]").InnerHtml.Split(';')[0].Replace("var observe24h_data = ", "");
    
                        string hour_now = DateTime.Now.Hour.ToString();
                        //降水量
                        var jangshui = "0";
                        //气温
                        var qiwen = "";
                        //湿度
                        var shidu = "";
                        //风速
                        var fengsu = "";
                        //风向
                        var fengxiang = "";
                        //监测时间
                        var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                        //guid
                        var guid = Guid.NewGuid().ToString().ToLower();
                        JObject jobject = (JObject)JsonConvert.DeserializeObject(json);
                        //获取所有json中的子集
                        var arr = (JArray)jobject["od"]["od2"];
                       
                        for (int i = 0; i < arr.Count; i++)
                        {
                            //取得当前日期的数据
                            if ((string)arr[i]["od21"] == hour_now)
                            {
                                jangshui = arr[i]["od26"].ToString();
                                qiwen = arr[i]["od22"].ToString();
                                shidu = arr[i]["od27"].ToString();
                                fengsu = arr[i]["od25"].ToString();
                                fengxiang = arr[i]["od24"].ToString();
                                break;
                            }
                        }
                        //向数据库执行插入操作
                      
                    }
                    catch (Exception ex)
                    {
                        result = ex.ToString();
                    }
                }
                return result;
    
            }
    

      

      

  • 相关阅读:
    大话设计模式之代理模式
    大话设计模式之装饰者模式
    策略模式与简单工厂模式
    一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行
    oozie JAVA Client 编程提交作业
    HashMap分析及散列的冲突处理
    cmp排序hdoj 1106排序
    定义member【C++】cstddef中4个定义
    目录启动CXF启动报告LinkageError异常以及Java的endorsed机制
    算法代码[置顶] 机器学习实战之KNN算法详解
  • 原文地址:https://www.cnblogs.com/dushaojun/p/10601617.html
Copyright © 2011-2022 走看看