
统计用区划代码
-
2023年3月20日发(作者:郑大教务系统)【2021最新】java爬取国家统计局>>统计⽤区划和城乡划分代码
⼀、爬取准备⼯作
1.本次爬取要⽤到的⼯具为Jsoup,引⼊Jsouppom依赖:
jsoup
1.12.1
2.实体类:为了便于保存,使⽤实体类,然后转换为你们需要的格式,json或者存⼊数据库等操作。
属性注释
id(当前市/区/县/乡)代码
pid(当前市/区/县/乡)⽗级代码
name(当前市/区/县/乡)名称
treeLevel(当前市/区/县/乡)层级
leaf(当前市/区/县/乡)是否叶⼦节点
sort(当前市/区/县/乡)排序
@Data
@EqualsAndHashCode(callSuper=false)
@Accessors(chain=true)
publicclassSysRegionimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
/**
*id
*/
@TableId("id")
privateLongid;
/**
*上级ID,⼀级为0
*/
@TableField("pid")
privateLongpid;
/**
*名称
*/
@TableField("name")
privateStringname;
/**
*层级
*/
@TableField("tree_level")
privateIntegertreeLevel;
/**
*是否叶⼦节点0:否1:是
*/
@TableField("leaf")
privateIntegerleaf;
/**
*排序
*/
@TableField("sort")
privateLongsort;
}
⼆、代码
爬取全国所有城乡太耗时了,所以这⾥我在代码⾥做了逻辑判断,使其只爬取浙江省,宁波市的所有信息,如果你们有其他需求可以在此代
码上做更改。
/**
*MarkYuon2021/9/10
*/
publicclassRegionCodeCrawling{
//固定写法:国家统计局的⾸页链接
privatestaticfinalStringlink="/tjsj/tjbz/tjyqhdmhcxhfdm/2020/";
//保存结果集的集合
privatestaticListregions=newArrayList();
publicstaticvoidmain(String[]args)throwsIOException{
//爬取省份
Documentdocument=t(link).get();
/*
*/
ElementsprovincetrAll=(".provincetr");
for(Elementprovincetr:provincetrAll){
for(Elementtd:en()){
Elementsa=("a");
Stringhref=("href");//
Stringname=();//浙江省
if(("浙江省")){
getShi(href);
}
}
}
}
//爬取市
privatestaticvoidgetShi(StringshiHref)throwsIOException{
Documentdocument=t(link+shiHref).get();
/*
*/
ElementscitytrAll=(".citytr");
for(Elementcitytr:citytrAll){
Elementcodetd=(0);
Elementnametd=(1);
Stringhref=("a").attr("href");//33/
Stringcode=("a").text();//33
Stringname=("a").text();//衢州市
if(("宁波市")){
SysRegionregion=newSysRegion();
(f(code));
(0L);
e(name);
//这⾥的排序写死,层级树设置为第⼀层。
//因为我的业务逻辑只拿宁波市的乡镇信息。
//如果你有其他需求,请在循环外部设置计数器。(例如:下⾯的区和街道逻辑)
eLevel(1);
t(1L);
(region);
getQu(href,code);
}
}
}
//爬取区
privatestaticvoidgetQu(StringcountryHref,StringcityCode)throwsIOException{
Documentdocument=t(link+countryHref).get();
/*
*/
*/
ElementscountryAll=(".countytr");
//这⾥的sort没有从0开始增加,是因为市下的第⼀级为市辖区,该级下⽆⼦级,⽤不着采集。所以直接跳过。
longsort=-1;
for(Elementcountrytr:countryAll){
sort++;
if(sort>0){
Elementcodetd=(0);
Elementnametd=(1);
Stringhref=("a").attr("href");//02/
Stringcode=("a").text();//33
Stringname=("a").text();//余姚市
SysRegionregion=newSysRegion();
(f(code));
(f(cityCode));
e(name);
eLevel(2);
f(1);
t(sort);
(region);
getJiedao(href,code);
}
}
}
//爬取乡镇(街道)
privatestaticvoidgetJiedao(StringjiedaoHref,StringcountryCode)throwsIOException{
Documentdocument=t(link+ing(0,2)+"/"+jiedaoHref).get();
/*
*/
ElementstownAll=(".towntr");
longsort=0;
for(Elementtowntr:townAll){
Elementcodetd=(0);
Elementnametd=(1);
Stringhref=("a").attr("href");//12/
Stringcode=("a").text();//33
Stringname=("a").text();//下应街道
SysRegionregion=newSysRegion();
(f(code));
(f(countryCode));
e(name);
eLevel(3);
f(1);
sort++;
t(sort);
(region);
getShequ(href,code);
}
}
//爬取村(社区)
privatestaticvoidgetShequ(StringshequHref,StringtownCode)throwsIOException{
Stringa=ing(0,2);
Stringb=ing(2,4);
Documentdocument=t(link+a+"/"+b+"/"+shequHref).get();
/*
*/
ElementsvillagetrAll=(".villagetr");
longsort=0;
for(Elementvillagetr:villagetrAll){
Elementcodetd=(0);
Elementnametd=(2);
Stringcode=();//33
Stringname=();//东兴社区居委会
SysRegionregion=newSysRegion();
(f(code));
(f(townCode));
e(name);
eLevel(4);
f(1);
sort++;
t(sort);
(region);
}
}
}
三、总结
1.⽹上⼤多数使⽤的都是httpclient等解析⼯具,本代码直接使⽤了jsoup,api全⾯便捷,代码量少。
2.因为本⼈存在具体采集需求,所以代码⾥只采集了宁波市以下的信息。如果读者有其他需求,可在本代码上进⾏更改,代码不难,易
读。
3.如果觉得好⽤⿇烦点个关注,收藏,谢谢⼤家。