✅ 操作成功!

统计用区划代码

发布时间:2023-06-17 作者:admin 来源:文学

统计用区划代码

统计用区划代码

-

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

/*

33

⾈⼭市

*/

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

/*

33

海曙区

*/

*/

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

/*

33

下应街道

*/

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

/*

33

112

胜利村村委会

*/

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.如果觉得好⽤⿇烦点个关注,收藏,谢谢⼤家。

👁️ 阅读量:0