• 下载最新全国邮编数据库


          因为工作的原因,需要一份比较完整的邮编数据库,网上的数据都是一些比较旧的,而且数据很少,真希望邮局能免费提供邮编的下载,或者有一个接口也可以啊。终于功夫不负有心人,目光定在http://www.cpdc.com.cn/(中国邮政集团公司名址信息中心)。这个地方的数据特别完整。但问题也随之而来,根本没有可以下载数据库的地方。

          虽然没有提供直接可下载的数据库,或是接口,查询到的html已经算是数据了,只要对页面的html源码加以分析,就可以取出每页的数据。不过网站还设置了一些小的障碍-验证码。每次点击下一页都需要验证码,不过总会有办法解决,嘿嘿……

          大家对于HttpWatch一定并不陌生,如果不知道就去Google一下,我们可以通过HttpWatch解决遇到的麻烦,也能更好的分析,我们在点击查询,或者下一页的时候都做了些什么。

          第一步:查询北京的邮编,其余都为空,点击查询,HttpWatch监视的情况如下:

    image 

       第二步:点击“下一页”,如下:

    image

      其实通过上面的两个图片,我们已经可以知道了我们需要的东西:

    1.查询时都是将数据提交到了 “http://***/Action.do” 页面;

    2.Post的数据为:dist_cd_addr:顶级地区邮编;pageNo:页码;reqCode:getpostcdbyDistcdaddr 应该是Action

    通过上面获取的内容,我们可以通过xmlhttp对象,将数据提交到指定页面,然后循环页数就能获取需要的数据了。如果你将dist_cd_addr的值提交为空,你就会发现,获得的数据是全国的所有数据,共170多万。

    C# 版代码片段如下:

    MSXML2.XMLHTTP xmlhttp = new MSXML2.XMLHTTP();
    string PostData;
    PostData = "addr_name=&cityselect=&ctyselect=&dist_cd_addr=&prvselect=&reqCode=getPostcdByDistcdAddr&pageNo=1&type=1&pageSize=1000";
    
    xmlhttp.open("POST", "http://***/postcdQueryAction.do", false, null, null);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-Length", PostData.Length.ToString());
    xmlhttp.send(PostData);
    s = xmlhttp.responseText;

    这样就能获取数据,然后通过解析s字符串的内容就可以了,但是因为数据量太大,需要一段时间才能取完数据,比较反对多线程,因为这样可能造成服务器的不稳定,影响大家的正常使用。这里写这篇Blog的目的只是为了介绍这个方式,通过HttpWath监视,然后用程序模仿页面提交,并获得数据。其实这种公共的数据库还是比较希望有免费的下载!

    提供一个早期前人整理的数据库:http://download.csdn.net/source/2153604

  • 相关阅读:
    Cannot read property 'createElement' of undefined
    Another git process seems to be running in this repository
    React第一次渲染为何容易出现TypeError: Cannot read property 'XX' of undefined
    哟,来看看JS里面变量声明方式
    工欲善其事,必先利其器(一)
    ==与===
    day day up
    代码不规范,同事皮锤现(下)
    代码不规范,同事皮锤现(中)
    医学影像调窗技术
  • 原文地址:https://www.cnblogs.com/shelley/p/1692351.html
Copyright © 2020-2023  润新知