惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
V
Visual Studio Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
L
LangChain Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
P
Proofpoint News Feed
博客园_首页
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - ShelleyZhang

悬浮框实现 C#操作xml SelectNodes,SelectSingleNode总是返回NULL 与 xPath 介绍 ODBC驱动重新注册 .net用OLEDB方式操作SqlServer和Sybase .net 连接 Sybase 影响行数问题——续 .net 连接 Sybase 影响行数问题 windows 7(x86) IE8 下的 owc Who knows Microsoft.XMLDOM相关资料 XML to Excel - ShelleyZhang 使用windows7的System帐户 C# 位域[flags] - ShelleyZhang - 博客园 VS.NET 控件命名规范 DNN初探(第二小时) DNN 初探(第一小时) 工作总结(临时存放一下) 中文vs2008安装 mvc 1 今天到了1000分了,庆祝一下 asp超过响应缓冲区限制的解决方法
下载最新全国邮编数据库
ShelleyZhang · 2010-03-23 · via 博客园 - ShelleyZhang

      因为工作的原因,需要一份比较完整的邮编数据库,网上的数据都是一些比较旧的,而且数据很少,真希望邮局能免费提供邮编的下载,或者有一个接口也可以啊。终于功夫不负有心人,目光定在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