java爬取国家统计局之统计用区划和城乡划分代码(省市区三级)
一、国家统计局网址
http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
二、引入jsoup依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.9.2</version></dependency>
三、爬虫程序
/*** @ClassName JavaJsoupUtil* @Description TODO* @Author Lock-玄清* @Date 2022/9/15 10:59**/
public class JavaJsoupUtil {/*** 公共路径url */private static String url = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/";/*** 建立连接 */private static Document connect(String url) {if (url == null || url.isEmpty()) {throw new IllegalArgumentException("无效的url");}try {return Jsoup.connect(url).timeout(200 * 2000).get();} catch (IOException e) {System.out.println(url+"地址不存在");return null;}}/*** 获取所有的省份 Lock-玄清* @param* @return*/public List<SysCitys> getProvinces() {List<SysCitys> sysAreas = new ArrayList<>();Document connect = connect(url+"index.html");Elements rowProvince = connect.select("tr.provincetr");for (Element provinceElement : rowProvince) {Elements select = provinceElement.select("a");for (Element province : select) {String codUrl = province.select("a").attr("href");String fatherCode = codUrl.replace(".html", "0000");String name = province.text();SysCitys sysCitys = returnCitys(fatherCode, name, "0000", "01");sysAreas.add(sysCitys);System.err.println("++++++++++++++++++++++++++开始获取" + name + "下属市区行政区划信息++++++++++++++++++++++++");String provinceUrl = url + codUrl;List<SysCitys> sysAreasList = getCitys(provinceUrl, fatherCode);sysAreas.addAll(sysAreasList);}}return sysAreas;}/*** 获取市行政区划信息 Lock-玄清* @param provinceUrl 省份对应的地址* @param parentCode 需要爬取的省份行政区划(对于市的父级代码即为省行政区划)* @return*/public List<SysCitys> getCitys(String provinceUrl,String parentCode){List<SysCitys> sysAreas = new ArrayList<>();Document connect = connect(provinceUrl);Elements rowCity = connect.select("tr.citytr");for (Element cityElement : rowCity) {String codUrl = cityElement.select("a").attr("href");String name = cityElement.select("td").text();String[] split = name.split(" ");String addrCode = split[0].substring(0,4);SysCitys sysCitys = returnCitys(addrCode+"00",split[1],parentCode,"02");sysAreas.add(sysCitys);System.err.println("-------------------开始获取"+split[1]+"下属区县行政区划信息-----------------------");String cityUrl = url+codUrl;List<SysCitys> downAreaCodeList = getCountys(cityUrl,addrCode+"00");sysAreas.addAll(downAreaCodeList);}return sysAreas;}/*** 获取区县行政区划信息 Lock-玄清* @param cityUrl 城市对应的地址* @param parentCode 需要爬取的市行政区划(对于区县的父级代码即为市行政区划)* @return*/public List<SysCitys> getCountys(String cityUrl,String parentCode){List<SysCitys> sysAreas = new ArrayList<>();Document connect = connect(cityUrl);Elements rowDown = connect.select("tr.countytr");for (Element downElement : rowDown) {String codUrl = downElement.select("a").attr("href");String name = downElement.select("td").text();String[] split = name.split(" ");if(!"市辖区".equals(split[1])){SysCitys sysCitys = returnCitys(split[0].substring(0,6),split[1],parentCode,"03");sysAreas.add(sysCitys);}}return sysAreas;}/*** 返回城市对象 Lock-玄清* @param addrCode* @param addrName* @param fatherCode* @return*/private SysCitys returnCitys(String addrCode,String addrName,String fatherCode,String type){SysCitys sysCitys = new SysCitys();sysCitys.setAddrCode(addrCode);sysCitys.setAddrName(addrName);sysCitys.setFatherCode(fatherCode);sysCitys.setType(type);sysCitys.setCreateTime(new Date());sysCitys.setUpdateTime(new Date());return sysCitys;}}
三、单元测试
/*** @ClassName JavaJsoupTest* @Description TODO* @Author Lock-玄清* @Date 2022/9/15 11:23**/
public class JavaJsoupTest {JavaJsoupUtil util = new JavaJsoupUtil();@Testpublic void cityTest(){//省List<SysCitys> sysAreas = util.getProvinces();System.out.println(sysAreas.size());System.err.println("爬虫相应数据为:"+ JSONObject.toJSONString(sysAreas));/* //市List<SysCitys> sysAreas = util.getCitys("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/50.html","500000");System.err.println("爬虫相应数据为:"+ JSONObject.toJSONString(sysAreas));*/}
}
四、附录
城市表结构及数据请点击下方链接下载
中国大陆地区省市区三级联动数据
省市区联动json数据下载中国大陆地区省市区三级联动json数据
五、说明
此文章仅有省市区三级数据的爬取程序,后续会更新省市区街道村五级程序。
此文章是玄清本人在工作之余自己写的,不喜勿喷。
java爬取国家统计局之统计用区划和城乡划分代码(省市区三级)相关推荐
- vba 抓取 统计用区划和城乡划分代码 到 电子表格
需要 用 到 统计用区划和城乡划分代码 数据,可以 国家统计局的是一个个页面,需要把数据爬出来. 哎,想当年VBA 写了那么多东西,现在连定义数组,变量赋值都忘了怎么弄,无奈边写边查,总算整出来一个 ...
- 【Java】Java爬取国家统计局五级行政区划编码(省、市(州)、县(区)、乡(镇)、村)
今天使用了idea+java爬取国家统计局12位行政区划编码,包括省.市(州).县(区).乡(镇).以及村委会/委员会等的行政编码和名称,将区划编码以及名称保存在数据库中. 本文内容包括数据库数据效果 ...
- 抓取国家统计局区划、城乡划分代码的简易python爬虫实现
抓取国家统计局区划.城乡划分代码的简易python爬虫实现 免责声明 本篇文章仅用于学习交流,并不针对任何网站.软件.个人. 概要说明 本篇文章介绍一个简易python爬虫的开发,对国家统计局区划.城 ...
- 项目系统涉及行政区划(区划和城乡划分代码)更新最新数据问题
一个项目需求,收到一份excel数据(据说)有今年最新的行政区划数据,只有两个字段信息: 数据同步更新到项目系统相关的表中. 分析excel数据和目前项目的数据和表结构,得出一定规律,写好导入代码,导 ...
- 使用java爬取国家统计局的12位行政区划代码
前言: 本文基于j2ee的原始url进行都写,解析指定内容时也是使用很傻的形式去查找指定格式的字符串来实现的. 更优雅的方式是可以使用apache的HttpClient和某些文档模型将HTML字符串构 ...
- Python爬虫练习五:爬取 2017年统计用区划代码和城乡划分代码(附代码与全部数据)
本文仅供学习,需要数据的文末有链接下载,请不要重复爬取. 最近工作中,因为统计用区划代码和城乡划分代码更新了最新的2017版,需要爬取最新的数据.于是乎,本次花了一定精力,将整个2017版数据完完整整 ...
- Java 爬取国家统计局统计用区划代码和城乡划分代码
插入速度比较慢,建议修改成批量插入. 用的 Spring Boot2.MyBatis Plus(Jdbc 都行,随便你).Junit5.okhttp.jsoup.dozer(你可以手动赋值,没几个属性 ...
- java爬取论坛信息_Java爬取校内论坛新帖
Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...
- Java 爬取BiliBili追番排行榜
看了標哥(代码忘烦恼)爬虫博客,两篇博客写的简单易懂:自己也跟着学了一下,几乎就是在上面进行的改动. Java爬虫 java爬取前程无忧(51job),这篇文章看博客代码不完整,建议看 github源 ...
- python爬虫练习五(补充): 2018年统计用区划代码和城乡划分代码(附代码与全部数据)
之前爬取过2017年的数据 详见 Python爬虫练习五:爬取 2017年统计用区划代码和城乡划分代码(附代码与全部数据) ,下面有评论说广东省的数据缺少了东莞与中山两个市的数据,检查网页结构发现确实 ...
最新文章
- Pandas选择一列或者多列数据
- python中global的用法
- 全球首个开放应用模型 OAM 开源 | 云原生生态周报 Vol. 23
- assert()函数
- java文件端点续传效果图_Java单依赖性Dockerized HTTP端点
- 上过云么?一行代码秒上云体验过么?
- 自己在win10中添加ADO控件步骤总结
- Java性能调优小技巧
- 一键关闭android应用程序工具类
- myeclipse里html添加背景颜色,myeclipse怎么设置主题-设置myeclipse主题背景颜色的教程 - 河东软件园...
- linux something
- [转]flash在C#中的应用
- Vue学习计划基础笔记(六) - 组件基础
- hive sql 替换指定的字符串
- 【定位】TOF与TDOA
- 平面上两直线的夹角求法解析
- 全新帝国CMS7.5大气科技感网站建设+网络公司网站源码
- 『SnowFlake』雪花算法的详解及时间回拨解决方案
- 解决QML debugging is enabled.Only use this in a safe environment.警告
- 《路由器开发 - 路由器刷机指南》华硕路由器RT-N66W刷机
热门文章
- QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV
- 郑大计算机组成原理(专科)试卷 答案,专科《数字电路与逻辑设计》
- 港台术语与内地术语之对照
- android studio 融云,融云 SDK 是否支持 AndroidX
- (ExcelVBA编程入门范例)
- 为了物尽其用报废的涉密计算机的硬盘,检测不到硬盘不能轻易将其定为报废
- oracle 本地数据库卸载,完美卸载Oracle数据库
- 关于so文件你需要知道的知识
- Javashop 7.0 增加小程序支付(二次开发)
- html输入公式得到混合运算结果,EXCEL公式与函数教案