`
buerkai
  • 浏览: 169577 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

获取全国邮编

    博客分类:
  • Bug
 
阅读更多

转载请注明出处:http://buerkai.iteye.com

package com.test.chaxun;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;

public class YoubianTest {
public static final String pa_shi = "<h3><a href=\"(.*)\" title=\"(.*)\">(.*)</a></h3>";
public static final String pa_xian = "<li><a href=\"(.*)\" title=\"(.*)\">(.*)</a></li>";

public static final String pa_jiedao = "<td class=\"linelink\"><a href=\"(.*)\" target=\"_blank\" title=\"(.*)\">(.*)</a></td>";
public static final String pa_code = "<td align=\"center\" class=\"linelink\"><a href=\"(.*)\" title=\"(.*)\">(.*)</a></td>";
public static final String pa_qucode = "<td align=\"center\">(.*)</td>";
public static final String pa_zxs = "<li(.*)><a href=\"(.*)\"  title=\"(.*)\">(.*)</a></li>";
public static final String pa_num = "则信息, 共分为 <span class=\"(.*)\">(.*)</span> 页";
public static final String ROOT = "c:/test/";

public static final String pa_guow_1 = "<tr height=\"22\">";
public static final String pa_guow_2 = "<td class=\"linelink\"><a href=\"(.*)\" target=\"_blank\">(.*)</a></td>";
public static final String pa_guow_3 = "<td>(.*)</td>";
public static final String pa_guow_4 = "td class=\"linelink\"><a href=\"(.*)\" target=\"_blank\">(.*)</a></td>";
public static final String pa_guow_5 = "<td class=\"linelink\"><a href=\"(.*)\" target=\"_blank\">(.*)</a></td>";

public static final String RES[] = { "http://www.youbian.com/s440000/",
"广东省", "http://www.youbian.com/s320000/", "江苏省",
"http://www.youbian.com/s330000/", "浙江省",
"http://www.youbian.com/s370000/", "山东省",
"http://www.youbian.com/s410000/", "河南省",
"http://www.youbian.com/s510000/", "四川省",
"http://www.youbian.com/s430000/", "湖南省",
"http://www.youbian.com/s360000/", "江西省",
"http://www.youbian.com/s420000/", "湖北省",
"http://www.youbian.com/s130000/", "河北省",
"http://www.youbian.com/s210000/", "辽宁省",
"http://www.youbian.com/s230000/", "黑龙江省",
"http://www.youbian.com/s350000/", "福建省",
"http://www.youbian.com/s610000/", "陕西省",
"http://www.youbian.com/s340000/", "安徽省",
"http://www.youbian.com/s220000/", "吉林省",
"http://www.youbian.com/s140000/", "山西省",
"http://www.youbian.com/s530000/", "云南省",
"http://www.youbian.com/s520000/", "贵州省",
"http://www.youbian.com/s620000/", "甘肃省",
"http://www.youbian.com/s460000/", "海南省",
"http://www.youbian.com/s630000/", "青海省",
"http://www.youbian.com/s150000/", "内蒙古自治区",
"http://www.youbian.com/s450000/", "广西自治区",
"http://www.youbian.com/s640000/", "宁夏自治区",
"http://www.youbian.com/s540000/", "西藏自治区",
"http://www.youbian.com/s650000/", "新疆自治区" };

public static void main(String[] abs) throws Exception {
build_GW();
build_ZH();
}

public static void build_GW() throws Exception {
String url = "http://www.youbian.com/guojiyoubian/list";
File f = new File(ROOT + "guowai.txt");
FileOutputStream fos1 = null;
FileOutputStream fos = null;
if (f.exists()) {
return;
} else {
f = new File(ROOT + "guowai.abs");
}
f.createNewFile();
fos1 = new FileOutputStream(f);
f = new File("c:/a.txt");
if (f.exists()) {
f.delete();
}
f.createNewFile();
fos = new FileOutputStream(f);

Pattern p1 = Pattern.compile(pa_guow_1);
Pattern p2 = Pattern.compile(pa_guow_2);
Pattern p3 = Pattern.compile(pa_guow_3);
Pattern p4 = Pattern.compile(pa_guow_4);
Pattern p5 = Pattern.compile(pa_guow_4);
int flag = 0;
String t_name = "";
String t_name2 = "";
String t_code1 = "";
String t_code2 = "";
for (int i = 1; i < 9; i++) {
String data = getNet(url + i, "utf-8");
fos.write(data.getBytes());
BufferedReader in;
in = new BufferedReader(new FileReader("c:/a.txt"));
String s = null;
while ((s = in.readLine()) != null) {
if (flag == 0) {
Matcher matcher = p1.matcher(s);
if (matcher.find()) {
flag = 1;
continue;
}
} else if (flag == 1) {
Matcher matcher = p2.matcher(s);
if (matcher.find()) {
flag = 2;
t_name = matcher.group(2);
continue;
}
} else if (flag == 2) {
Matcher matcher = p3.matcher(s);
if (matcher.find()) {
flag = 3;
t_name2 = matcher.group(1);
continue;
}
} else if (flag == 3) {
Matcher matcher = p4.matcher(s);
if (matcher.find()) {
flag = 4;
t_code1 = matcher.group(2);
continue;
}
} else if (flag == 4) {
Matcher matcher = p5.matcher(s);
if (matcher.find()) {
flag = 0;
t_code2 = matcher.group(2);
String a = (t_name.trim() + "-" + t_name2.trim() + "-"
+ t_code1 + "-" + t_code2)
+ "\n";
System.out.println(a);
fos1.write(a.getBytes());
continue;
}
}
}
}
fos1.close();
f = new File(ROOT + "guowai.abs");
File f_new = new File(ROOT + "guowai.txt");
f.renameTo(f_new);

}

/***
* 国内邮编
*
* @throws Exception
*/
public static void build_ZH() throws Exception {
Ttt t = null;
for (int u = 0; u < RES.length; u += 2) {
t = new Ttt(RES[u], RES[u + 1]);
t.start();

}
parsezxs();
}

public static class Ttt extends Thread {
public String a, b;

public Ttt(String a, String b) {
this.a = a;
this.b = b;
}

public void run() {
try {
parsep(a, b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static final String RES2[] = { "http://www.youbian.com/c110000/",
"北京市", "http://www.youbian.com/c310000/", "上海市",
"http://www.youbian.com/c120000/", "天津市",
"http://www.youbian.com/c500000/", "重庆市" };

/**
* 解析直辖市
*/
public static void parsezxs() throws Exception {
File f = null;
FileOutputStream fos = null;
for (int i = 0; i < RES2.length; i += 2) {
String data = getNet(RES2[i], "utf-8");
String a = RES2[i + 1];
f = new File(ROOT + a);
if (!f.exists()) {
f.mkdirs();
}
f = new File(ROOT + a + "/" + a + ".txt");
if (f.exists()) {
f.delete();
}
f.createNewFile();
f = new File("c:/a.txt");
if (f.exists()) {
f.delete();
}
f.createNewFile();
fos = new FileOutputStream(f);
fos.write(data.getBytes());
Pattern pattern = Pattern.compile(pa_zxs);
BufferedReader in;
in = new BufferedReader(new FileReader("c:/a.txt"));
String s = null;
f = new File(ROOT + a + "/" + a + ".txt");
fos = new FileOutputStream(f);
while ((s = in.readLine()) != null) {
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
String ab = matcher.group(2);
String ac = matcher.group(4);
fos.write((ab.trim() + "-" + ac.trim() + "\n").getBytes());
}
}
parsefile(a);
}

}

public static void parsep(String url, String p) throws Exception {
parsequxian(url, p);
parsefile(p);
}

public static void parsefile(String p) throws Exception {
File f = new File(ROOT + p);
if (!f.exists()) {
return;
}
if (f.isFile()) {
return;
}
File fs[] = f.listFiles();
File ft = null;
BufferedReader in = null;
String s = null;
FileOutputStream fos = null;
for (int i = 0; i < fs.length; i++) {
ft = fs[i];
if (!ft.isFile()) {
continue;
}
in = new BufferedReader(new FileReader(ft));

s = in.readLine();
if (ft.length() < 20) {
s = deal(s);
if (s.equals("")) {
continue;
}
String url = "http://www.youbian.com" + s;
String aa = ft.getName();
aa = aa.substring(0, aa.length() - 4);
f = new File(ROOT + p + "/" + aa);
if (!f.exists()) {
f.mkdirs();
}
f = new File(ROOT + p + "/" + aa, aa + ".txt");
if (f.exists()) {
continue;
} else {
f = new File(ROOT + p + "/" + aa, aa + ".abs");
if (f.exists()) {
f.delete();
}
}
f.createNewFile();
fos = new FileOutputStream(f);
parsejiedao(url, fos);
// 设置重命名规则
File f_new = new File(ROOT + p + "/" + aa, aa + ".txt");
f.renameTo(f_new);
continue;
}
while ((s = in.readLine()) != null) {
String[] av = s.split("-");
String url = "http://www.youbian.com" + av[0];
String aa = ft.getName();
aa = aa.substring(0, aa.length() - 4);
f = new File(ROOT + p + "/" + aa);
if (!f.exists()) {
f.mkdirs();
}
f = new File(ROOT + p + "/" + aa, av[1] + ".txt");
if (f.exists()) {
continue;
} else {
f = new File(ROOT + p + "/" + aa, av[1] + ".abs");
if (f.exists()) {
f.delete();
}
}
f.createNewFile();
fos = new FileOutputStream(f);
parsejiedao(url, fos);
// 设置重命名规则
File f_new = new File(ROOT + p + "/" + aa, av[1] + ".txt");
f.renameTo(f_new);

}
}
}

public static void parsejiedao(String url, FileOutputStream fos2) {
try {
String t_url = "";
int num = 2;
int len = 0;
for (int id = 0; id < num; id++) {
if (id > 0) {
t_url = url + (id + 1) + ".htm";
// t_url="http://www.youbian.com/p511724/17.htm";
} else {
t_url = url;
}
// System.out.println(t_url);
// t_url="http://www.youbian.com/p511724/2.htm";
String data = getNet(t_url, "UTF-8");
if (data.length() == len) {
break;
}
len = data.length();
File f = new File("c:/a.txt");
if (f.exists()) {
f.delete();
}
FileOutputStream fos = new FileOutputStream("c:/a.txt");
fos.write(data.getBytes());
Pattern pattern = Pattern.compile(pa_jiedao);
Pattern pattern_code = Pattern.compile(pa_code);
Pattern pattern_qucode = Pattern.compile(pa_qucode);
Pattern pattern_num = Pattern.compile(pa_num);
BufferedReader in;
in = new BufferedReader(new FileReader("c:/a.txt"));
String s = null;
int flag = 0;
String qu = "";
String code = "";
String qucode = "";
while ((s = in.readLine()) != null) {
Matcher matcher = pattern_num.matcher(s);
if (matcher.find()) {
num = Integer.parseInt(matcher.group(2).trim());
}
matcher = pattern.matcher(s);
if (flag == 0 && matcher.find()) {
qu = matcher.group(3);
flag = 1;
} else if (flag == 1) {
matcher = pattern_code.matcher(s);
if (matcher.find()) {
code = matcher.group(3);
flag = 2;
}
} else if (flag == 2) {
matcher = pattern_qucode.matcher(s);
if (matcher.find()) {
qucode = matcher.group(1);
flag = 0;
System.out.println(qu + "----" + code + "----"
+ qucode);
fos2.write((qu.trim() + "-" + code.trim() + "-"
+ qucode.trim() + "\n").getBytes());
}
}

}

Thread.sleep(60);
}
fos2.close();
} catch (Exception e) {
e.printStackTrace();
}

}

public static void parsequxian(String url, String p) {
try {
String data = getNet(url, "UTF-8");
// System.out.println(data);
File f = new File(ROOT + p);
if (!f.exists()) {
f.mkdirs();
}
f = new File("c:/a.txt");
if (f.exists()) {
f.delete();
}
FileOutputStream fos = new FileOutputStream("c:/a.txt");
fos.write(data.getBytes());
Pattern pattern = Pattern.compile(pa_shi);
Pattern pattern_xian = Pattern.compile(pa_xian);
BufferedReader in;
in = new BufferedReader(new FileReader("c:/a.txt"));
String s = null;
boolean isxian = true;
while ((s = in.readLine()) != null) {
if (isxian) {
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
String bs = matcher.group(3);
// System.out.println(bs);
String a = bs.substring(0, bs.length() - 2);
f = new File(ROOT + p + "/", a + ".txt");
if (f.exists()) {
continue;
}
f.createNewFile();
fos = new FileOutputStream(f);
isxian = false;
fos.write((matcher.group(1) + "\n").getBytes());
}
} else {
Matcher matcher = pattern_xian.matcher(s);
if (matcher.find()) {
String a1 = matcher.group(1);
String a3 = matcher.group(3);
// System.out.println("---" + a1 + "----" + a3);
fos.write((a1 + "-" + a3 + "\n").getBytes());
} else {
Matcher matcher2 = pattern.matcher(s);
if (matcher2.find()) {
String bs = matcher2.group(3);
// System.out.println("xxx---" + bs);
// isxian = false;
String a = bs.substring(0, bs.length() - 2);
f = new File(ROOT + p + "/", a + ".txt");
if (f.exists()) {
f.delete();
}
f.createNewFile();
fos = new FileOutputStream(f);
fos.write((matcher2.group(1) + "\n").getBytes());
}
}
}
}
in.close();

} catch (Exception e) {
e.printStackTrace();
}
}

public static String getNet(String path, String chartype) {
try {
URL url = new URL(path);
URLConnection conn = url.openConnection();
// conn.setDoOutput(true);
conn.setDoInput(true);
conn.setReadTimeout(60000);
InputStream inputStream = conn.getInputStream();
String gg = conn.getHeaderField("Content-Encoding");
GZIPInputStream gzipInputStream;
InputStreamReader isr = null;
if (gg == null || "".equals(gg)) {
isr = new InputStreamReader(inputStream, chartype);
} else if (gg.equals("gzip")) {
gzipInputStream = new GZIPInputStream(inputStream);
isr = new InputStreamReader(gzipInputStream, chartype);
} else {
isr = new InputStreamReader(inputStream, chartype);
}

StringBuffer sb = new StringBuffer();
BufferedReader in = new BufferedReader(isr);
String inputLine;

while ((inputLine = in.readLine()) != null) {
sb.append(inputLine);
sb.append("\n");
}
isr.close();
inputStream.close();
conn = null;
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static String deal(String input) {
if(input==null){
return "";
}
if (input.contains("dongguan")) {
return "/c441900/";
} else if (input.contains("zhongshan")) {
return "/c442000/";
} else if (input.contains("jiyuan")) {
return "/c410881/";
} else if (input.contains("jiayuguan")) {
return "/c620200/";
} else if (input.contains("sanya")) {
return "/c460200/";
} else if (input.contains("wulanchabumeng")) {// 无邮编
return "";
}
return input;
}

}
分享到:
评论

相关推荐

    全国邮政编码数据库(精确到乡镇级)

    "全国邮编区号简略版.mdb"可能是另一个数据库文件,专门存储了邮政编码和电话区号的对应关系,方便进行电话号码的解析和定位。 在实际应用中,这样的数据库可以被集成到各种系统中,如电子商务平台的地址验证、物流...

    邮政编码全国数据,精确到县市区

    4. **数据格式与获取**:邮政编码数据通常以表格形式存在,包含行政区划名称、邮政编码等字段。这个压缩包可能包含这样的CSV或Excel文件,方便用户查询和导入到其他应用程序中。 5. **数据更新**:邮政编码可能会...

    谷搜全国邮政编码查询系统

    《谷搜全国邮政编码查询系统详解》 在信息化日益发达的今天,邮政编码作为物流、信件传递的重要标识,其查询需求也随之增加。"谷搜全国邮政编码查询系统"应运而生,它是一个专为用户提供高效、准确的邮政编码查询...

    国内邮政编码2023版-MySQL数据库脚本(postcode-detail.sql)

    本资源包包含国内邮编及邮编分管范围,包含字段:邮政编码、省/直辖市、地市、区县和乡镇区域,数据量全共计95万条

    全国邮政编码(sql2005)

    综上所述,全国邮政编码数据库在SQL Server 2005中的构建和应用,不仅可以满足基本的邮编查询需求,还可以通过扩展功能提供更加丰富的服务,对物流、电商、地图导航等领域具有重要价值。正确管理和利用这些数据,...

    全国邮政编码数据库(约19万条数据)

    因为本库的收录数据约187287行,为了避免读者打开文件时加载过慢,故分成4个文档,00为数据库的表结构,01~04为具体的插入数据,读者只需按顺序向你的数据库执行这几个文档即可(当然了,这里是没有先建数据库的,...

    获取中国省市县基本信息代码C#版

    标题中的“获取中国省市县基本信息代码C#版”指的是一个使用C#编程语言实现的程序,该程序能够获取并处理中国各个省市县的详细信息,包括但不限于行政区域名称、ID编码、邮政编码等。这样的程序在开发需要地理信息的...

    全国邮政编码数据查询实例(网上下载来的)!!!!

    全国邮政编码数据查询实例是一个基于数据库的应用程序,用于帮助用户快速查找中国境内的邮政编码信息。...通过"邮编电话区号查询.mdb"文件,我们可以获取到全国各地的邮政编码和电话区号,从而简化地址管理和通信过程。

    全国邮编 access版本

    标题中的“全国邮编 access版本”指的是一个使用Microsoft Access数据库管理系统开发的应用程序,该程序专门用于存储和查询全国范围内的邮政编码信息。Access是一个强大的数据管理工具,它允许用户创建数据库,组织...

    纯js省市县三级联动 附带邮编

    全国邮编的整合是这一功能的关键部分。中国每个行政区域都有其独特的邮政编码,这些数据需要准确无误地提供给用户。在实现中,开发者可能会创建一个对象或数组,以省份、城市、区县为键,邮编为值,方便查找。当用户...

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

    全国所有城市邮政编码和长途电话区号是公民和企业日常生活中不可或缺的信息,这些数据主要用于邮寄信件、包裹,以及拨打电话。以下是一些关键知识点: 1. **邮政编码**:邮政编码是由数字组成的代码,用于识别邮件...

    全国区号邮政编码数据库

    全国区号邮政编码数据库是一个包含了中国境内300多个城市区号和邮政编码的重要信息资源。这个数据库对于从事与地理位置、物流配送、数据分析等相关工作的专业人士来说具有极高的实用价值。以下将详细介绍数据库中的...

    Citywithaccess.rar_ACCESS数据库_Citywithaccess_access_全国乡镇_全国邮政编码

    用户可以通过设计查询来获取特定区域的邮政编码,或者通过VBA(Visual Basic for Applications)编程实现更复杂的数据处理和分析。例如,可以创建一个查询来找出所有邮政编码以某个数字开头的乡镇,或者统计各省份的...

    省市区加邮编JS

    邮编可以通过获取选定区县的键值来获取。 在实际开发中,我们可以使用jQuery或者其他前端框架如React、Vue等来简化DOM操作。例如,使用jQuery的一个简单示例可能是这样的: ```javascript // 假设data是上面的JSON...

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

    标题中的“全国省市县代码,邮政编码,电话区号查询”是一个关于中国内地地区编码信息的数据库应用。这个应用主要用于帮助用户快速查找全国各地的省级、市级、县级行政区域的代码,以及对应的邮政编码和电话区号。在...

    全国城市邮编数据库(精确到乡镇街道).zip

    全国城市邮编数据库是一个非常实用的数据资源,它包含了中国各个城市的邮政编码信息,并且精确到了乡镇街道级别。这种详尽的数据库对于各种需要地理定位或邮政服务的应用来说是至关重要的,比如物流配送、营销分析、...

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

    全国所有城市邮政编码及长途电话区号是公民和企业日常生活中不可或缺的重要信息,主要用于邮政投递和电话通信。邮政编码是中国邮政系统为了高效分拣和传递邮件而设定的一组六位数字,每个地区都有其独特的编码,使得...

    全国邮编查询小工具(可在线升级)

    全国邮编查询小工具是一款专为用户设计的实用软件,主要功能是提供全国各地的邮政编码和城市区号的查询服务。这款工具具有易用性高、功能实用的特点,同时还具备在线升级、数据导出导入以及错误数据修改等功能,极大...

    全国省、市、区、县、乡、镇、街道邮编及经纬度坐标

    描述提到的“全国各地区的坐标加区号,共46090条”是指这个数据集包含了中国所有行政区域的邮政编码(区号)以及它们对应的地理坐标(经纬度)。邮政编码是用于邮件分发的数字代码,而经纬度则代表地球表面的地理...

    全国城市邮编数据 全国省市区邮编

    全国城市邮编数据

Global site tag (gtag.js) - Google Analytics