android 行政区域,最新Android使用Jsoup获取省市县行政区划代码行政编码(附源码与Json数据)...

首先要先找到民政局的区划代码地址:http://www.mca.gov.cn/article/sj/xzqh/2020/

这个网址的最后是根据年份来追加的。可以自己获取当前年份份来访问,我们需要的是页面列表的第一条数据链接。民政部的数据有一定的延迟,略滞后于区划调整文件发布时间。

1638c672fccd

在这里插入图片描述

通过分析可以看出我们需要的链接在一个table标签下的tr标签里面,其中的第二个td标签包含的a标签的href属性就是我们最终要拿到的链接。

不过我是通过另一个页面获取到的,在民政局的官网民政数据选项里:http://www.mca.gov.cn/article/sj/

我们一样可以获取,里面有区划代码的板块,我们要获取的同样是第一条数据。

1638c672fccd

在这里插入图片描述

我这里直接选取了class="tzggbox_c_b"的div标签来获取a标签的href的属性值。`

String url= Jsoup.connect(Constant.MCA_URL)

.get()

.getElementsByClass("tzggbox_c_b")

.get(2)

.select("a[href]")

.attr("abs:href");

这里我们获得一个html的网页链接,访问这个链接你会发现代码拿到的html页面跟我们最终要进入的页面不一样,再一对比两个链接,也是没有什么关系。最终要进入的页面链接在哪里呢?细心查看代码获取到的html,你会发现里面有个一个script标签包含这样的属性值,这里面包含的链接才是最终的链接指向。

window.location.href="http://www.mca.gov.cn//article/sj/xzqh/2020/202011/202011060901.html";

这个htnl包含很多script标签,需要循环判断一下,同时里面的url需要处理一下域名后面的双斜杠换成单斜杠,不然jsoup会报错。

for (int i=0;i

if(doc.get(i).data().contains("window.location.href=")){

s=doc.get(i).data().split("=")[1];

s=s.replace("\"","");

s=s.replace(";","");

}

}

接下来就到了真正要解析的页面了,我们要的数据同样是在table标签的tr标签里,但是当你去取的时候发现数据不全,这是因为jsoup通过get取的数据大小有限制,我们需要通过maxBodySize方法设置一下。

tr= Jsoup.connect(s).maxBodySize(Integer.MAX_VALUE)

.get()

.select("table")

.get(0)

.select("tr");

每个tr标签对应的一行数据,里面有多行的td标签

1638c672fccd

在这里插入图片描述

到这里你可能又要问了,省市区怎么区分的,看这个网页的结构,你就能看出差异,市级比省级缩进了一点,县级又比市级缩进了,通过网页源码也可以看出,省市用的td标签里的class属性值是一样的,都是class="xl7025509",但是市级比省级多了一个span标签,而县级的class属性值跟省市是不一样的,class="xl7125509",同样也有一个span标签,这样就很好区分了。

if(cityInfo.hasClass("xl7025509")){//省市

if(!cityInfo.select("span").isEmpty()){//市

}else{//省

if(cityName.endsWith("市")){

}

}

}else if(cityInfo.hasClass("xl7125509")){//区县

if(!cityInfo.select("span").isEmpty()){

}

这里要注意一下,因为四个直辖市的原因,直辖市是省级,下面直接就是县级了,可能需要自己去生成一个市级的。另外民政部在页面最后面注明了:台湾省、香港特别行政区和澳门特别行政区暂缺地市和区县信息。

到这里基本主要的逻辑就已经讲完了,代码已经上传到了我的github,这里附上Demo源码,另外根据获取的信息,我还制作了省市县的三级结构Json文件方便大家直接使用,如果有帮助到大家,希望可以给个Star,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值