拉取最新县及县以上行政区划代码

本贴最后更新于 1699 天前,其中的信息可能已经渤澥桑田

最新县及县以上行政区划代码(截止 2016 年 7 月 31 日)

url:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html(网站 404)

更多数据

可以通过 UNPKG 下载使用 CDN 资源: https://unpkg.com/province-city-china/dist/

文件列表 JSON CSV SQL CDN
总数据(省/地/县/乡) data.json data.csv data.sql data.sql / csv / json
省/地/县/乡层级数据 level.json - - level.json
省级(省/直辖市/特别行政区) province.json province.csv - province.json / csv
地级(城市) city.json city.csv - city.json / csv
县级(区县) area.json area.csv - area.json / csv
乡级(乡镇/街) town.json town.csv - town.json / csv
县市区没有乡级数据

参考代码:http://www.thinksaas.cn/topics/0/353/353549.html
工具:jsoup

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class getpcd {

	/**  
	 * All rights Reserved, Designed By www.vps6.win
	 * @Title:  getpcd.java   
	 * @Package   
	 * @Description:    TODO(用一句话描述该文件做什么)   
	 * @author: liuchao     
	 * @date:   2017年4月27日 下午10:52:40   
	 * @version V1.0 
	 * @Copyright: 2017 www.vps6.win Inc. All rights reserved. 
	 * 
	 */
	private static final Logger log = Logger.getLogger("xzqhdm");
	private static final String separator = "#";
	public static void main(String[] args) throws Exception {
		List<String> list = getData();
		for(String s : list){
			System.out.println(s);
		}
		saveData(list);
	}

	private static List<String> getData() throws Exception {
		List<String> retList = new ArrayList<String>();
		Map<String,String> map = new HashMap<String,String>();

		Document doc = Jsoup.connect("http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html").post();
		Elements ps = doc.select(".TRS_PreAppend p");
		for (Element e : ps) {
			Elements spans = e.select("span");
			Element firstE = null;
			Element secondE = null;;
			
			if(spans.size() == 3){
				//一级
				firstE = spans.first();
				secondE = spans.get(2);
			}else{
				//二级/三级
				firstE = spans.get(1);
				secondE = spans.get(3);
			}
			String key = StringUtils.trim(firstE.ownText());
			map.put(key, key+separator+StringUtils.trim(secondE.ownText().replace(" ", ""))+ separator + key.substring(0, 4)+"00"+separator+"3");
			if (key.endsWith("0000")) {
				map.put(key, key+separator+StringUtils.trim(secondE.ownText().replace(" ", ""))+ separator+"0"+separator+"1");
				//key = key.substring(0, 2);
			} else if (key.endsWith("00")) {
				map.put(key, key+separator+StringUtils.trim(secondE.ownText().replace(" ", ""))+ separator+key.substring(0, 2)+"0000"+separator+"2");
				//key = key.substring(0, 4);
			}
			if(map.get(key) == null){
				System.out.println(key);
			}
			retList.add(map.get(key));
		}
		return retList;
	}

	private static void saveData(List<String>  list) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost/test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull",
					"root", "root");
			conn.setAutoCommit(false);// 事务不自动提交

			pstmt = conn.prepareStatement("delete from code");
			int count = pstmt.executeUpdate();
			log.log(Level.INFO, "___删除数据" + count);

			int batch = 500;// 一次插入多少笔
			int loop = list.size() / batch;// batch可以循环的次数
			int last = list.size() - batch * loop;// 最后剩余
			int start = 0;// list从哪开始取数据
			int index = 1;// 问号参数
			int allCount = 0;// 统计总共插入多少数据

			for (int i = 0; i < loop; i++) {
				index = 1;// 重置到第一个问号参数
				pstmt = conn.prepareStatement(getPreSql(batch));
				for (int j = start; j < start + batch; j++) {
					String[] s = list.get(j).split(separator);
					for (int k = 0; k < s.length; k++) {
						pstmt.setString(index, s[k]);
						index++;
					}
				}
				count = pstmt.executeUpdate();
				allCount += count;
				log.log(Level.INFO, "___插入数据" + count);
				start += batch;
			}

			if (last > 0) {
				index = 1;// 重置到第一个问号参数
				pstmt = conn.prepareStatement(getPreSql(last));
				for (int j = start; j < list.size(); j++) {
					String[] s = list.get(j).split(separator);
					for (int k = 0; k < s.length; k++) {
						pstmt.setString(index, s[k]);
						index++;
					}
				}
				count = pstmt.executeUpdate();
				allCount += count;
				log.log(Level.INFO, "___插入数据" + count);
			}
			log.log(Level.INFO, "___一共插入" + allCount);

			conn.commit();// 提交事务
			conn.setAutoCommit(true);// 还原现场

		} catch (ClassNotFoundException e) {
			log.log(Level.SEVERE, "___找不到MySQL驱动包" + e.getMessage());
			e.printStackTrace();
		} catch (Exception e) {
			log.log(Level.SEVERE, "___执行SQL异常" + e.getMessage());
			e.printStackTrace();
			try {
				if (conn != null) {
					conn.rollback();
					conn.setAutoCommit(true);// 还原现场
					log.log(Level.WARNING, "___回滚数据");
				}
			} catch (SQLException e1) {
				log.log(Level.SEVERE, "___回滚异常" + e.getMessage());
				e1.printStackTrace();
			}
		} finally {
			try {
				if (pstmt != null) {
					pstmt.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				log.log(Level.SEVERE, "___关闭数据库连接异常" + e.getMessage());
				e.printStackTrace();
			}
		}
	}

	/**
	 * 生成sql
	 *
	 * @return
	 */
	private static String getPreSql(int count) {
		StringBuilder sb = new StringBuilder();
		sb.append("INSERT INTO `code` (`code`, `name`,`pcode`,`type`) VALUES");
		for (int i = 0; i < count; i++) {
			sb.append("(?, ?, ?, ?),");
		}
		return sb.substring(0, sb.length() - 1);
	}
}

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖 • 1 关注
  • JSONP
    4 引用 • 11 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
1 操作
alanfans 在 2019-12-31 15:32:46 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 倾城之链
    23 引用 • 66 回帖 • 124 关注
  • sts
    2 引用 • 2 回帖 • 178 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 125 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 533 回帖 • 746 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 127 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 61 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1429 引用 • 10052 回帖 • 484 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 55 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 5 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 510 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    82 引用 • 37 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • abitmean

    有点意思就行了

    31 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 615 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 458 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 83 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    28 引用 • 66 回帖 • 1 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 326 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 125 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖