`
a137268431
  • 浏览: 157583 次
文章分类
社区版块
存档分类
最新评论

GET请求12306网站链接获取火车站代号信息更新到后台数据库表中

 
阅读更多

之前写过“使用HTTP GET请求12306网站接口获取车站名和车站Code”。链接地址是:

http://www.cnblogs.com/litao4047/archive/2013/05/31/3110781.html

这个链接所表述的内容是,从12306网站上利用get解析地址获取车站名和代号,获取到的数据就是网站上的那个js文件(数据没有经过处理),全国火车站代号字典:station_name.js

今天,所要讲述的就是,处理上面链接获取到的数据,写个插入方法将数据更新到数据库表中。处理获取到的数据形式如下:

比如,获取的一条数据是varstation_names ='@bjb|北京北|VAP|beijingbei|bjb|0';经过处理后(字段分割),想要是数据就是'北京北'和'VAP',然后将这样的数据更新到后台数据库中。

首先,将形如'@bjb|北京北|VAP|beijingbei|bjb|0'的数据分割成六个字段firstLetter(首字母),name(站点名),code(站点代号),pinyin(全拼),shorthand(缩写),order(排序),建立一个Model类用于存储数据,代码示例:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Update_Train_Code
{
    /// <summary>
    /// 站点信息
    /// </summary>
    public class Station
    {
        private string name;//站点名

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private string code;//缩写

        public string Code
        {
            get { return code; }
            set { code = value; }
        }
        private string firstLetter;//首字母

        public string FirstLetter
        {
            get { return firstLetter; }
            set { firstLetter = value; }
        }
        private string pinyin;// 全拼

        public string Pinyin
        {
            get { return pinyin; }
            set { pinyin = value; }
        }
        private string shorthand;// 简写

        public string Shorthand
        {
            get { return shorthand; }
            set { shorthand = value; }
        }
        private string order;// 排序

        public string Order
        {
            get { return order; }
            set { order = value; }
        }
    }
}
复制代码

其次,用get请求http://dynamic.12306.cn/otsweb/js/common/station_name.js地址解析数据,将得到的数据进行缓存,字段分割处理存储于List<Station>泛型集合中,返回list。

/// <summary>
/// 获取车站信息
/// </summary>
/// <param name="timeout"></param>
/// <param name="userAgent"></param>
/// <param name="cookie"></param>
publicstaticList<Station> GetStations()
{
CookieContainer cookieContainer = newCookieContainer();
HttpWebRequest request = WebRequest.Create(formUrl) asHttpWebRequest;
request.Method = "GET";
request.KeepAlive = false;
request.AllowAutoRedirect = true;
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
request.CookieContainer = cookieContainer;
HttpWebResponse SendSMSResponse = (HttpWebResponse)request.GetResponse();
StreamReader SendSMSResponseStream = newStreamReader(SendSMSResponse.GetResponseStream());
stringresponse = SendSMSResponseStream.ReadToEnd();
List<Station> list = newList<Station>();
try
{
varstr = response;
Regex stationNamesRegex = newRegex("'(?<stationNames>[^\']*?)'");
if(stationNamesRegex.IsMatch(str))
{
stringstationNames = stationNamesRegex.Matches(str)[0].Groups["stationNames"].Value;
string[] stations = stationNames.Split('@');
foreach(varstation instations)
{
if(string.IsNullOrEmpty(station))
{
continue;
}
string[] names = station.Split('|');
list.Add(newStation()
{
Shorthand = names[0],
Name = names[1],
Code = names[2],
Pinyin = names[3],
FirstLetter = names[4],
Order = names[5]
});
}
}
}
catch(Exception)
{
}
SendSMSResponse.Close();
SendSMSResponseStream.Close();
returnlist;
}

再次,连接MySql数据库,写一个insert方法,将上述缓存取得的数据更新到数据库表中。

/// <summary>
/// 向data_jtfw_hc_code表中插入数据
/// </summary>
/// <param name="t_name"></param>
/// <param name="t_code"></param>
publicstaticvoidInsertData(stringt_name, stringt_code)
{
using(MySqlConnection conn = newMySqlConnection(MySqlString))
{
stringmysql = string.Format("insert into data_jtfw_hc_code(name,code) values ('{0}','{1}')", t_name, t_code);
MySqlCommand cmd = newMySqlCommand(mysql, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
}

最后,调用获取站点信息方法和更新数据库表数据方法,获取处理过的信息已经存在了list集合中,通过实例化Model类,根据name,code字段遍历出数据,往数据库中更新。。。在Main()方法中调用的代码示例如下:

复制代码
       static void Main(string[] args)
        {
            List<Station> lst = new List<Station>();
            lst = GetStations();
            foreach (Station st in lst)
            {
                InsertData(st.Name, st.Code);
            }
            Console.WriteLine("已执行完毕!!!");
            Console.Read();
        }
复制代码

点击执行,所有获取的信息就这样轻而易举的更新到了数据库。。。

以上也算是完整的代码示例了,如果您想要源码,请触击以下链接,然后输入访问密码(访问密码:83f2):

http://yunpan.cn/QegWkHcdegSF4  

一家之言,仅供参考!!!

分享到:
评论

相关推荐

    Vue链接后台数据库的增删改查

    Vue.js 是一款流行的前端JavaScript框架,它用于构建用户界面,尤其擅长单页应用程序(SPA)的开发。...通过理解并熟练掌握这两者,开发者能够轻松实现描述中的“Vue链接后台数据库的增删改查”功能。

    C# 使用Get和Post请求获取数据

    当使用GET或POST请求获取到JSON数据后,我们可以用`DeserializeFromJson`方法将其转换为对应的C#对象,便于进一步处理。 综上所述,C#通过`HttpClient`类提供的方法可以方便地执行GET和POST请求,获取Web服务的数据...

    C# 后台请求接口的方法(GET,POST)

    根据给定的文件信息,我们可以总结出以下关于C#后台请求接口的方法(GET, POST)的知识点: ### C#后台请求接口方法概述 在Web开发过程中,前后端之间的数据交互非常关键,通常会使用HTTP协议中的GET和POST两种...

    微信小程序开发仿智行火车票12306,含后台和数据库 采用ssm+mysql设计,能查询到火车票信息.zip

    在本项目中,MyBatis可能被用来连接数据库,执行查询和更新操作,从而获取和保存火车票信息。开发者可以使用注解或XML配置来定义SQL语句,实现灵活的数据访问。 4. **MySQL数据库**:MySQL是一种广泛使用的开源关系...

    Java源码获取数据库中表的字段信息

    例如,`SHOW COLUMNS FROM table_name`在MySQL中可以获取表的字段信息,而在SQL Server中,可以使用`SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name'`。 5. **处理结果集**:执行查询后...

    微信小程序开发:request请求后台获取不到data解决方法

    微信的request的post请求后台获取不到data(当初这个问题纠结了好久好久),原因是post传递的data是json格式而不是key,value的格式,所以获取不到相应的data就是post请求应为表单模式的data,微信小程序提供的data...

    php查询12306火车票

    7. **数据存储与展示**:获取到火车票信息后,你可能需要将其存储在数据库中以便后续处理,或者直接输出到用户界面。这需要你掌握基本的SQL操作和前端展示技术。 8. **安全与合法性**:在开发过程中,必须遵守12306...

    java如何获得数据库表中各字段的字段名

    ### Java如何获得数据库表中各字段的字段名 在Java编程中,经常需要与数据库进行交互,例如查询、更新或删除等操作。其中一项常见需求是获取数据库表中的所有字段名称。这通常在动态生成报表或者需要根据数据库结构...

    android 用webservice连接后台数据库

    在Android应用开发中,连接后台数据库是常见的需求,通常我们通过Web服务(如WebService)来实现这一功能。本文将深入探讨如何在Android中利用WebService与后台数据库进行交互,以及这方面的扩展开发可能性。 首先...

    C# .net数据库表实体类生成,一键生成数据库所有表的实体类

    首先,我们需要连接到数据库并获取其架构信息。这可以通过ADO.NET的`SqlConnection`类实现,连接字符串应包含数据库服务器、数据库名、用户名和密码等信息。一旦连接建立,我们可以使用`SqlCommand`执行SQL查询,如`...

    java 获取数据库的基本信息

    在Java编程中,获取数据库的基本信息是常见的任务,这包括连接状态、数据库版本、表信息、用户权限等。本文将详细讲解如何使用Java JDBC(Java Database Connectivity)来获取这些信息。 首先,要与数据库建立连接...

    winform GET请求和POST请求

    在Windows Forms(Winform)应用开发中,GET和POST是两种常见的HTTP请求方法,用于从服务器获取或向服务器发送数据。这两个概念对于任何与Web交互的客户端程序设计都是至关重要的,尤其是在使用C#进行Winform编程时...

    java判断数据库表是否存在

    具体到本例中,我们使用以下调用来获取表信息: ```java rs = meta.getTables(null, null, table.toUpperCase() + "_TRC", null); ``` 这里,`table.toUpperCase() + "_TRC"` 是我们要查询的表名。 #### 4. ...

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

    C#获取目标网址http头信息,比如状态码等等信息

    在C#编程中,我们需要经常处理HTTP请求,获取目标网址的HTTP头信息,例如状态码、响应时间、服务器类型等,这些信息对于分析网页状态、诊断网络问题以及构建Web应用程序非常有用。本文将深入探讨如何在C#中获取这些...

    http get post 请求模拟器

    HTTP是互联网上应用最为广泛的一种网络协议,GET和POST是HTTP协议中的两种主要请求方法,它们在Web开发中扮演着重要角色。理解这两者的工作原理和区别对于...同时,访问提供的链接,可以获取更多软件资源和更新信息。

    VC++ HTTP Get Post请求

    数据封装在请求体中,而不是像GET那样放在URL中。在VC++中实现POST请求,除了使用WinInet库外,还需要设置请求头以指定POST方法和内容类型。下面是一个简单的示例: ```cpp HINTERNET hRequest = HttpOpenRequest...

    动态获取数据库中的数据作为loadrunner的参数替换GetData.dll

    在这个场景中,我们关注的是如何“动态获取数据库中的数据作为LoadRunner的参数”,这通常涉及到参数化技术,使得测试更加真实且可重复。而“GetData.dll”可能是一个自定义的动态链接库,用于实现这个功能。 在...

    通过.net获取页面数据保存到数据库中

    在.NET框架中,获取网页数据并将其保存到数据库是一项常见的任务,这通常涉及到网络请求、HTML解析以及数据库操作。以下是一些关键知识点的详细说明: 1. **HTTP客户端库**:.NET提供了一些内置的HTTP客户端库,如`...

Global site tag (gtag.js) - Google Analytics