Beispiel #1
0
        private static void Main(string[] args)
        {
            Console.WriteLine("请输入FromStation(SHH || NJH):");
            string from_station = Console.ReadLine();

            Console.WriteLine("请输入EndStation(SHH || NJH):");
            string end_station = Console.ReadLine();

            Console.WriteLine("请输入爬取数据的日期距离今天的天数(0~30):");
            int delta_day = int.Parse(Console.ReadLine() ?? throw new InvalidOperationException());

            Console.WriteLine($"12306爬虫参数为:from_station={from_station}");
            Console.WriteLine($"12306爬虫参数为:end_station={end_station}");
            Console.WriteLine($"12306爬虫参数为:delta_day={delta_day}");

            ///车次及车票数据爬取部分
            TrainsTickets trainsTickets = new TrainsTickets
            {
                SelectDateTime = DateTime.Now.AddDays(delta_day), //车票信息的查询时间
                FromStation    = from_station,                    //车票信息的起点站
                ToStation      = end_station                      //车票信息的终点站
            };

            ///爬取信息并存储excel
            trainsTickets.GetTrainInfo(out var trainsTable);
            List <string> trainNoLists = trainsTickets.ReadExcelTrainNo(trainsTickets.TrainsTicketsExcelPath, out List <string> trainStartStationLists, out List <string> trainEndStationLists);

            //输出车票信息的列车编号列表,起点站列表,终点站列表
            ///将数据存储进sql_sever
            trainsTickets.DataTable2SqlServer(trainsTable);//将dataTable存进sqlServer
            Console.WriteLine("车票信息存储完毕\n-----------------------------------------------------------------------------------------------------");


            Console.WriteLine("按下回车键进行爬取每一个车次的时刻表信息(*^_^*)");

            while (Console.ReadKey(true).Key == ConsoleKey.Enter)
            {
                ///时刻表爬取部分
                List <string> bugTrain = new List <string>();
                for (int i = 0; i < trainNoLists.Count; i++)
                {
                    //拿到第一列车的时刻表信息
                    TrainTimeTable trainTimeTable = new TrainTimeTable(trainNoLists[i], trainStartStationLists[i], trainEndStationLists[i], trainsTickets.SelectDateTime);
                    try
                    {
                        DataTable dataTable = trainTimeTable.CreateTrainTimeDataTable();
                        trainTimeTable.DataTable2SqlServer(dataTable);
                        Console.WriteLine(
                            $"车次{trainTimeTable.TrainNo}时刻表信息存储完毕\n-------------------------------------------------------------------------------------------------------");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        bugTrain.Add(trainNoLists[i]);
                    }
                }
            }

            Console.ReadKey();
        }
Beispiel #2
0
        private static void Main(string[] args)
        {
            TrainsTickets trainsTickets = new TrainsTickets
            {
                //上海到南京
                //SelectDateTime = DateTime.Now.AddDays(3), FromStation = "SHH", ToStation = "NJH"

                //南京到上海
                SelectDateTime = DateTime.Now.AddDays(3), FromStation = "NJH", ToStation = "SHH"
            };

            //车票信息的查询时间
            //车票信息的起点站
            //车票信息的终点站
            trainsTickets.GetTrainInfo(out var trainsTable);
            List <string> trainNoLists = trainsTickets.ReadExcelTrainNo(trainsTickets.TrainsTicketsExcelPath, out List <string> trainStartStationLists, out List <string> trainEndStationLists); //输出车票信息的列车编号列表,起点站列表,终点站列表

            trainsTickets.DataTable2SqlServer(trainsTable);                                                                                                                                      //将dataTable存进sqlServer

            Console.WriteLine("车票信息存储完毕\n-----------------------------------------------------------------------------------------------------");



            // ReSharper disable once CollectionNeverQueried.Local
            List <string> bugTrain = new List <string>();

            for (int i = 0; i < trainNoLists.Count; i++)
            {
                TrainTimeTable trainTimeTable = new TrainTimeTable(trainNoLists[i], trainStartStationLists[i], trainEndStationLists[i], trainsTickets.SelectDateTime);//拿到第一列车的时刻表信息
                try
                {
                    DataTable dataTable = trainTimeTable.CreateTrainTimeDataTable();
                    trainTimeTable.DataTable2SqlServer(dataTable);
                    Console.WriteLine(
                        $"车次{trainTimeTable.TrainNo}时刻表信息存储完毕\n-------------------------------------------------------------------------------------------------------");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    bugTrain.Add(trainNoLists[i]);
                }
            }



            Console.ReadKey();
        }
Beispiel #3
0
        /// <summary>
        /// 输出具体车次时刻表的datatable。输出其excel,默认地址为桌面
        /// </summary>
        /// <returns></returns>
        public DataTable CreateTrainTimeDataTable()
        {
            //Thread.Sleep(3000);
            JArray    jArray    = TrainsTickets.GetUrlJson(TrainTimeTableUrl);
            DataTable dataTable = new DataTable(jArray[0]["station_train_code"].ToString());//表名为列车编号,这里需要注意的是json返回的数据结构、

            dataTable.Columns.Add("车次");
            dataTable.Columns.Add("站序");
            dataTable.Columns.Add("站名");
            dataTable.Columns.Add("到站时间");
            dataTable.Columns.Add("出发时间");
            dataTable.Columns.Add("停留时间");
            dataTable.Columns.Add("始发站");
            dataTable.Columns.Add("终点站");
            foreach (var item in jArray)
            {
                DataRow dataRow = dataTable.NewRow();                         //新创建一行
                dataRow["车次"]   = jArray[0]["station_train_code"].ToString(); //注意这里的车次号和trainNo是不一样的,trainNo是580000K5260E
                dataRow["站序"]   = item["station_no"];
                dataRow["站名"]   = item["station_name"];
                dataRow["到站时间"] = item["arrive_time"];
                dataRow["出发时间"] = item["start_time"];
                dataRow["停留时间"] = item["stopover_time"];
                dataRow["始发站"]  = jArray[0]["start_station_name"];
                dataRow["终点站"]  = jArray[0]["end_station_name"];
                dataTable.Rows.Add(dataRow);
            }



            ///展示部分可以使用
            //将datatable存储为excel
            var trainTimeTableExcel = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) +
                                      $"\\trainTime_{DateTime.Now:yyyyMMddhhmmss}.xlsx";//桌面上生成数据文件

            if (this.TrainTimeTableExcelPath == null)
            {
                this.TrainTimeTableExcelPath = trainTimeTableExcel;
            }
            Excel.TableToExcel(dataTable, this.TrainTimeTableExcelPath);
            Console.WriteLine($"车次信息存储完毕,Excel地址为:\n{this.TrainTimeTableExcelPath}\n");
            return(dataTable);
        }