Java学习-056-Jsoup爬虫获取中国所有的三级行政区划数据(一)
2023-09-11 14:18:59 时间
在涉及地址服务时,经常需要用到地址信息的获取,而行政区划可能不定期的发生变化,所以我们需要获取最新的行政区划信息。因行政区划数据量较大,Java中可以使用Jsoup进行数据的获取、处理。
大家经常用到的行政区划数据,可从中华人民共和国民政部网站上获取,响应请求链接如下所示:
http://www.mca.gov.cn/article/sj/xzqh/2019/
界面如下图所示:
截至当前对应的行政区划数据请求链接为:http://www.mca.gov.cn/article/sj/xzqh/2019/201901-06/201904301706.html ,对应的页面显示如下所示:
通过观察中华人民共和国县以上行政区划代码的列表中可以看出行政区划代码基本规则:
- 行政区划代码若为非 “00” 结尾,可将区划级别视为 三级;
- 行政区划代码若为 “00” 结尾,可将区划级别视为 二级;
- 行政区划代码若为 “0000” 结尾,可将区划级别视为 一级;
页面部分源码如下所示:
可知:行政区划代码数据存储在 table 中,表格的第二列存放“行政区划代码”,表格的第三列存放“单位名称”;
爬取思路如下:
1、获取响应结果的 dom 树;
2、获取所有的行标签;
3、便利所有的列标签,获取拥有三个以上子列的行信息,并取第 2 列和第 3 列;
4、依据行政区划代码基本规则,进行数据的标示;
5、输出获得的行政区划数据,此处输出为 SQL 插入语句。
源代码如下所示:
@Test public void getRegionSql () throws Exception { String url = "http://www.mca.gov.cn/article/sj/xzqh/2019/201901-06/201904301706.html"; int count = 0; Document doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0 Win64 x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36") .header("Accept", "text/html,application/xhtml+xml,application/xmlq=0.9,image/webp,image/apng,*/*q=0.8,application/signed-exchangev=b3") .maxBodySize(0) .timeout(100000) .get(); Elements trs = doc.select("tr"); for (Element tr : trs ) { Elements tds = tr.select("td"); if (tds.size() > 3) { String regionCode = tds.get(1).text(); String regionArea = tds.get(2).text(); String parentCode = ""; if (validCode(regionCode)) { int leveType = 2; parentCode = regionCode.substring(0,2) + "0000"; if (!regionCode.endsWith("00")) { leveType = 3; parentCode = regionCode.substring(0,4) + "00"; } if (regionCode.endsWith("0000")) { leveType = 1; parentCode = "000000"; } count++; String content = String.format("insert into region_code (code, name, level, parent_code, dtime, note, ctime)" + " values (%s, '%s', %s, %s, '201903', '系统生成', NOW());" + System.getProperty("line.separator"), regionCode, regionArea, leveType, parentCode); System.out.println(content); } } } System.out.println("总数量为:" + count); }
相关文章
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
- JAVA 注解教程(四)Java 预置的注解
- JAVA学习(一):Java介绍及其平台、开发环境的配置与搭建
- Java实现 LeetCode 837 新21点(DP)
- Java实现 LeetCode 287 寻找重复数
- Java实现 LeetCode 219 存在重复元素 II(二)
- Java实现猜底牌问题(贪婪法)
- Java实现 蓝桥杯VIP 算法训练 星际交流
- Java实现 蓝桥杯VIP 算法训练 简单加法
- java 11 标准Java异步HTTP客户端
- 【刷题】java会不会内存泄漏
- java代码的编译执行过程
- 【JAVA】java中的length和length()
- 【JAVA】java编译错误:编码UTF8/GBK的不可映射字符
- [Java Srping] @RestController and @Controller
- Scala数组和Java集合List的互转
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
- 【Java】java中javaSE与javaEE的区别
- java 方法 compareTo()的正确使用
- 【Java】java 性能监控及工具
- Java-idea-mybatis plugin插件使用
- java - 详解 Java 17 中新推出的密封类
- 【java】Java 继承
- 【java】Java 内存模型
- java基础知识之多态