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(); }
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(); }
/// <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); }