`
holoblog
  • 浏览: 1264169 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19538
文章分类
社区版块
存档分类
最新评论

10分钟采集凡客最新的省、市、区、邮政编码和电话区号(附源码)

 
阅读更多

最近的开发的项目需要用到省、市、区数据,因为要开发的项目也是电子商务网站,在参考凡客的用户体验时,发现它连深圳最新分离出来的光明新区都有了,拍拍网都没有更新数据,看来凡客在数据更新方面还是挺负责的,所以了解了一下它的数据格式,然后花了点时间写了个小程序来抽取最新的省、市、区、邮政编码和电话区号,邮政编码和电话区号是在用户选择数据后推荐给用户选择的,免得用户再花时间去查,如下界面: 

 

一共有三个地址是返回数据的:

private string GetCityDataUrl(string province)
{
 
    return string.Format(url, JScriptUtil.Escape(province), GetRandom());
}
 
private string GetDistrictDataUrl(string province, string city)
{
    string url = "http://my.vancl.com/DeliveryAddress/GetAreaData?cityId={0}&povinceId={1}&r={2}";
 
    return string.Format(url, JScriptUtil.Escape(city), JScriptUtil.Escape(province), GetRandom());
}
 
private string GetPostCodeUrl(string province, string city, string district)
{
    string url = "http://my.vancl.com/DeliveryAddress/GetPostalCode?povince={0}&city={1}&area={2}&r={3}";
 
    return string.Format(url, Utils.UrlEncode(province), Utils.UrlEncode(city), Utils.UrlEncode(district), GetRandom());
}

 

核心函数:

// 抽取凡客数据
private void DoGetVanclData()
{
    string[] provinces = Util.Provinces.Split('|');
    for (int i = 0; i < provinces.Length; i++)
    {
        string theP = provinces[i].Trim();
 
        this.Invoke(new MethodInvoker(() =>
        {
            this.label1.Text = theP + "...";
        }));
 
        // 增加省份
        int pid = GetNewId("Province");
        this.Invoke(new MethodInvoker(() =>
        {
            if (pid == 1)
                this.textBox1.Text += "insert into [Db_MoMoMate].[dbo].[Province]([Id],[Name])\r\nSELECT " + pid.ToString() + ", '" + theP + "'\r\n";
            else
                this.textBox1.Text += "union\r\nSELECT " + pid.ToString() + ", '" + theP + "'\r\n";
        }));
 
        // 获取城市数据
        string[] cityData = WebRequestHelper.HttpGet(GetCityDataUrl(theP), "", Encoding.UTF8).Split('$');
        Thread.Sleep(10);
 
        foreach (string city in cityData)
        {
            string theC = city.Split(',')[1].Trim();
 
            // 城市id
            int cid = GetNewId("City");
            string AreaCode = null;
 
            // 获取区数据
            string[] districtData = WebRequestHelper.HttpGet(GetDistrictDataUrl(theP, theC), "", Encoding.UTF8).Split('$');
            Thread.Sleep(10);
 
            foreach (string district in districtData)
            {
                string theD = district.Split(',')[1].Trim();
 
                // 区id
                int did = GetNewId("District");
                string[] postData = WebRequestHelper.HttpGet(GetPostCodeUrl(theP, theC, theD), "", Encoding.UTF8).Split('$');
 
                if (AreaCode == null)
                {
                    AreaCode = postData[4];
                }
 
                string postCode = postData[3];
 
                Thread.Sleep(10);
                // 增加区
                this.Invoke(new MethodInvoker(() =>
                {
                    if (did == 1)
                        this.textBox3.Text += "insert into [Db_MoMoMate].[dbo].[District]([Id],[CityId],[Name],[PostCode])\r\nSELECT " + did.ToString() + ", " + cid.ToString() + ", '" + theD + "', '" + postCode + "'\r\n";
                    else
                        this.textBox3.Text += "union\r\nSELECT " + did.ToString() + ", " + cid.ToString() + ", '" + theD + "', '" + postCode + "'\r\n";
                }));
            }
 
            // 增加城市
            this.Invoke(new MethodInvoker(() =>
            {
                if (cid == 1)
                    this.textBox2.Text += "insert into [Db_MoMoMate].[dbo].[City]([Id],[ProvinceId],[Name],[AreaCode])\r\nSELECT " + cid.ToString() + ", " + pid.ToString() + ", '" + theC + "', '" + AreaCode + "'\r\n";
                else
                    this.textBox2.Text += "union\r\nSELECT " + cid.ToString() + ", " + pid.ToString() + ", '" + theC + "', '" + AreaCode + "'\r\n";
            }));
        }
 
        this.Invoke(new MethodInvoker(() =>
        {
            if (i == provinces.Length - 1)
            {
                this.label1.Text = "done";
                this.button1.Enabled = true;
            }
        }));
    }
}

 

最终运行效果如下:

 

本公司项目中还需要大学数据,那是09年开发大学SNS网站的老数据了,把数据都放进数据库:

 

 

3
2
分享到:
评论
3 楼 lwz5910 2011-12-15  
234390216 写道
要是啥时候凡客把它的程序改了,咋办呢?比如它的格式或者URL等。

你不会自己把数据先保存起来啊?
2 楼 234390216 2011-12-08  
要是啥时候凡客把它的程序改了,咋办呢?比如它的格式或者URL等。
1 楼 txin0814 2011-12-07  
这个有用 收藏

相关推荐

    全国省市县代码,邮政编码,电话区号查询

    对于中国内地的省市县代码、邮政编码和电话区号的查询尤其如此。这些编码信息的应用贯穿于日常生活的各个角落,从填写地址到快递邮寄,从日常生活通讯到商业联络,准确无误地使用这些信息对于保证信息流通的顺畅至关...

    四川省各县、市、区长途电话区号和邮政编码表.docx

    根据提供的文档内容,我们可以整理出四川省各市、县、区的长途电话区号及邮政编码的相关知识点。以下是对这些信息的详细解读与扩展。 ### 四川省各县、市、区长途电话区号和邮政编码概述 #### 一、成都市及其各...

    EXCEL版全国所有城市邮政编码及长途电话区号

    EXCEL版全国所有城市邮政编码及长途电话区号

    国内邮政编码、电话区号查询软件

    标题中的“国内邮政编码、电话区号查询软件”是一款专门用于查找中国境内的邮政编码和电话区号的工具。在信息化社会中,这样的软件对于个人和企业用户都非常实用,尤其在处理邮件、包裹投递、长途电话拨打等问题时,...

    云南省各县市区长途电话区号和邮政编码

    ### 云南省各县市区长途电话区号和邮政编码详解 #### 一、概述 本文将详细介绍云南省内各个县市区的长途电话区号与邮政编码。这些信息对于了解当地通信及邮递服务具有重要意义,并有助于在进行远程联系或邮寄时...

    全国所有城市邮政编码及长途电话区号

    天津作为直辖市,邮政编码以300000开头,电话区号为022,例如天津市区的编码是300000,宁河的编码是301500,而重庆的编码以400000开头,电话区号为023,如重庆市区的编码为400000,北碚区为400700。 其他城市如沈阳...

    实例邮编区号查询源码

    数据库中应包含省、市、区(县)以及对应的邮政编码字段。设计合理的数据库表结构对于高效查询至关重要,可能包括省份表、城市表和区县表,各表之间通过关联字段进行连接。 2. 数据获取与维护:邮编和区号数据需要...

    全国邮编电话区号数据库

    每一行记录代表一个特定的地理区域,其中“地区”列详细列出了具体的县市名称,“所属省市区”列明确了该地区所属的省级行政单位,而“邮政编码”和“电话区号”则分别提供了与该地区相关的邮政和电信服务信息。...

    全国所有城市邮政编码及长途电话区号.doc

    邮政编码和长途电话区号是现代通信中不可或缺的两套编码系统,它们各自承担着为邮件和电话通信定位区域的关键作用。随着社会经济的快速发展和信息化进程的加速,这两套编码系统对于促进人们的日常沟通、商业活动的...

    全国城市(含省市区、经纬度、首字母、邮政编码、电话区号)sql

    标题中的“全国城市(含省市区、经纬度、首字母、邮政编码、电话区号)sql”表明这是一个关于中国所有城市的数据集,其中包含了省级行政单位、市级行政单位以及区级行政单位的相关信息。这个数据集是用SQL...

    省市区邮政编码和区号级联sql文件

    省市区邮政编码和区号级联sql文件 可以直接建表。。

    最新全国邮政编码及区号大全

    而唐山市作为河北省的另一重要城市,其长途区号为315,邮政编码也有所不同,如路南区的邮政编码为31563000。这些数据详细地体现了中国各省市的区域划分和通信网络的独特性。 除上述地区外,全国邮政编码及区号大全...

    全国省市区最新数据(省、市、区、行政代码、区号、邮编)

    全网都在找省市区最新数据,但是这些数据在官网只能看,没有提供下载地址,花了一周时间手动整理,全国省市区最新数据(省、市、区、行政代码、区号、邮编),获取数据来源http://xzqh.mca.gov.cn/map

    中国各省市邮政编码、电话区号大全.xls

    中国各省市邮政编码、电话区号大全.xls

    全国所有城市邮编及区号.pdf

    文档提到天津市的邮政编码为300000,电话区号为022,并提供了宁河(301500)、静海(301600)、武清(301700)、宝坻(301800)和蓟县(301900)等地的具体信息。 #### 六、重庆市邮政编码与电话区号 重庆市位于...

    邮政编码查询工具单机版(带有电话区号)

    邮政编码查询工具是一款非常实用的软件,特别是在处理与邮寄、物流相关...通过下载和使用这个压缩包中的"邮政编码电话区号"文件,用户将能够快速掌握全国各地区的邮政编码和电话区号,从而更有效地进行通信和物流操作。

    国际电话区号表json

    国际电话区号表json

    全国主要城市邮政编码及长途电话区号

    全国主要城市邮政编码及长途电话区号全国主要城市邮政编码及长途电话区号全国主要城市邮政编码及长途电话区号

    邮政编码电话区号查询Web版 v1.0

    《邮政编码电话区号查询Web版 v1.0》是一款基于Web的应用程序,旨在帮助用户快速、方便地查询中国境内的邮政编码、电话区号等信息。作为一个专业的IT大师,我将详细介绍这款应用的核心功能、技术实现以及相关知识点...

Global site tag (gtag.js) - Google Analytics