java 行政区划 三级_Java学习-056-Jsoup爬虫获取中国所有的三级行政区划数据(一)...

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

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

界面如下图所示:

6cb90aac5d87ab198186f93049698ae1.png

4ebf29a85fb2ab19c4c60c91ab1ad482.png

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

行政区划代码若为非 “00” 结尾,可将区划级别视为 三级;

行政区划代码若为 “00” 结尾,可将区划级别视为 二级;

行政区划代码若为 “0000” 结尾,可将区划级别视为 一级;

页面部分源码如下所示:

d00dc27c5dcf71dc031b128c9e925b61.png

可知:行政区划代码数据存储在 table 中,表格的第二列存放“行政区划代码”,表格的第三列存放“单位名称”;

爬取思路如下:

1、获取响应结果的 dom 树;

2、获取所有的行标签;

3、便利所有的列标签,获取拥有三个以上子列的行信息,并取第 2 列和第 3 列;

4、依据行政区划代码基本规则,进行数据的标示;

5、输出获得的行政区划数据,此处输出为 SQL 插入语句。

源代码如下所示:

@Testpublic void getRegionSql () throwsException {

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值