在涉及地址服务时,经常需要用到地址信息的获取,而行政区划可能不定期的发生变化,所以我们需要获取最新的行政区划信息。因行政区划数据量较大,Java中可以使用Jsoup进行数据的获取、处理。

大家经常用到的行政区划数据,可从中华人民共和国民政部网站上获取,响应请求链接如下所示:

http://www.mca.gov.cn/article/sj/xzqh/2019/

界面如下图所示:

截至当前对应的行政区划数据请求链接为:http://www.mca.gov.cn/article/sj/xzqh/2019/201901-06/201904301706.html ,对应的页面显示如下所示:

通过观察中华人民共和国县以上行政区划代码的列表中可以看出行政区划代码基本规则:

  1. 行政区划代码若为非 “00” 结尾,可将区划级别视为 三级;
  2. 行政区划代码若为 “00” 结尾,可将区划级别视为 二级;
  3. 行政区划代码若为 “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学习-056-Jsoup爬虫获取中国所有的三级行政区划数据(一)的更多相关文章

  1. Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失

    通过查看数据可知,直辖市或者某些三级行政区域没有对应的二级区域,为方便后续的地址使用,可自定义缺失的二级地址. 如下示例自定义的二级行政区域的名称为一级区域的名称,对应的源码如下所示: 将此段源码添加 ...

  2. Java学习-057-Jsoup爬虫获取中国所有的三级行政区划数据(二),并生成数据库 SQL 脚本插入语句

    多不废话,直接上马,小主您稳着... package com.fanfengping.zeus.uitl; import com.alibaba.fastjson.JSONObject; import ...

  3. Java学习-059-Jsoup爬虫获取中国所有的三级行政区划数据(四),生成相应的 JSON 数据并输出

    还是直接上马,对应的源码如下所示: 生成的三级行政区划部分 JSON 数据如下所示:

  4. Java学习-013-文本文件读取实例源代码(两种数据返回格式)

    此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...

  5. Python实现简单的爬虫获取某刀网的更新数据

    昨天晚上无聊时,想着练习一下Python所以写了一个小爬虫获取小刀娱乐网里的更新数据 #!/usr/bin/python # coding: utf-8 import urllib.request i ...

  6. Jsoup爬虫获取公司纳税识别号

    天眼查 /** * 根据公司名称获取统一社会信用代码 * * @author xiaofei.xian 日期:2019年3月20日 上午11:12:41 */ public class GetTaxN ...

  7. Java学习笔记 jar包获取当前路径

    情况 使用一个jar包,需要下载一个文件到与当前jar包同目录,如何去获取此目录? 代码 使用.即可作为当前的目录 windows环境下,我的jar包所在的目录为D:\test val dir = F ...

  8. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  9. (java)Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页

    Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页,输出 职位名称*****公司名称*****职位月薪*****工作地点*****发布日期 import java.io.I ...

随机推荐

  1. 项目Beta冲刺(团队4/7)

    项目Beta冲刺(团队) --4/7 作业要求: 项目Beta冲刺(团队) 1.团队信息 团队名 :男上加男 成员信息 : 队员学号 队员姓名 个人博客地址 备注 221600427 Alicesft ...

  2. 【Javascript】call

    var ShowDlg = function ShowDlg() { } ShowDlg.prototype.animate = function(msg) { alert(msg); } var l ...

  3. 小程序SetData

  4. Numpy | 06 从已有的数组创建数组

    numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个. numpy.asarray(a ...

  5. haproxy 2.0 dataplaneapi rest api 几个方便的问题排查接口

    在使用haproxy 2.0 dataplaneapi的时候,刚开始的时候我们可能需要进行调试,保证我们的配置在我们的系统环境中 是可以使用的,以下是自己在当前学习中为了排查问题会使用的几个api 创 ...

  6. Nginx 优化配置

    基本配置优化(优化后配置样例,可以改后直接上生产) 1 #头部配置 2 user nginx nginx; #定义nginx的启动用户,不建议使用root 3 worker_processes 4; ...

  7. 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed

    题目描述 最大化平均值 二分一个\(x\) \(check\): \(\frac{F+\sum_{i=1}^{n} X_{i} \times F_{i}}{M+\sum_{i=1}^{n} X_{i} ...

  8. ES6基础入门之let、const

    作者 | Jeskson来源 | 达达前端小酒馆 01 首先呢?欢迎大家来学习ES6入门基础let,const的基础知识内容.初始ECMA Script6. ESMAScript与JavaScript ...

  9. Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩。

    1.  收件数据过多,删除部分邮件可解决 我尝试失败,在foxmail把收件箱全部删完了没解决. 2.  网上最常见的解决方法 https://help.foxmail.com/cgi-bin/hel ...

  10. python 一个二维数组和一个整数,判断数组中是否含有该整数

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...