一、核心代码
代码以内蒙古行政区划为例
前提准备
- 内蒙古的行政区划代码
shengCode
(如需其他地区需要修改这个字段),对应的shengName
也需要修改, - 行政区划以下例子只取了省、市、县层级分别用1、2、3表示
- 数据来源 全国行政区划信息
- 代码中url来源于下图(一定要点省份查询,然后再复制url)
//内蒙古
String url = "http://xzqh.mca.gov.cn/defaultQuery?shengji=%C4%DA%C3%C9%B9%C5%D7%D4%D6%CE%C7%F8%A3%A8%C4%DA%C3%C9%B9%C5%A3%A9&diji=-1&xianji=-1";
// 连接到目标网页并获取 HTML 文档
Document doc = Jsoup.connect(url).get();
// 获取表格中的所有行
Elements trs = doc.select(".mid_con_qt .info_table tbody tr");
Elements shiji = trs.select("tr[flag]");
List<RegionDO> regionList = new ArrayList<>();
//一、省级信息
String shengCode = "150000000000";
String shengName = "内蒙古";
RegionDO regionDOSheng = new RegionDO();
regionDOSheng.setId(Long.valueOf(shengCode));
regionDOSheng.setCode(Long.valueOf(shengCode));
regionDOSheng.setName(shengName);
regionDOSheng.setLevel(1);
regionDOSheng.setPid(0L);
regionDOSheng.setCategory(0);
regionDOSheng.setRegionIds(shengCode);
regionDOSheng.setParentNames(shengName);
regionDOSheng.setProvince(shengName);
regionList.add(regionDOSheng);
for (Element element : shiji) {
//二、市级信息
//行政区划(市级)
String shiCode = element.select("td").get(4).text() + "000000";
//名称
String shiName = element.attr("flag");
RegionDO regionDOShi = new RegionDO();
regionDOShi.setId(Long.valueOf(shiCode));
regionDOShi.setCode(Long.valueOf(shiCode));
regionDOShi.setName(shiName);
regionDOShi.setLevel(2);
regionDOShi.setPid(Long.valueOf(shengCode));
regionDOShi.setCategory(0);
regionDOShi.setRegionIds(shengCode+","+shiCode);
regionDOShi.setParentNames(shengName+shiName);
regionDOShi.setProvince(shengName);
regionDOShi.setCity(shiName);
regionList.add(regionDOShi);
Elements shengji = trs.select("tr[parent="+ shiName+"]");
//三、区县信息
for (Element item : shengji) {
Elements tds = item.select("td");
String quName = tds.get(0).text();
String quCode = tds.get(4).text() + "000000";
RegionDO regionDOQu = new RegionDO();
regionDOQu.setId(Long.valueOf(quCode));
regionDOQu.setCode(Long.valueOf(quCode));
regionDOQu.setName(quName);
regionDOQu.setLevel(3);
regionDOQu.setPid(Long.valueOf(shiCode));
regionDOQu.setCategory(0);
regionDOQu.setRegionIds(shengCode+","+shiCode+","+quCode);
regionDOQu.setParentNames(shengName+shiName+quName);
regionDOQu.setProvince(shengName);
regionDOQu.setCity(shiName);
regionDOQu.setDistrict(quName);
regionList.add(regionDOQu);
}
}
// regionMapper.insert(regionList);
for (RegionDO regionDO : regionList) {
System.out.println(regionDO);
}
爬虫需要用的Jsoup库
二、实体类
这是代码中的实例,要是你的不一样请修改对应代码
package cc.xiaopeng.model.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 行政区划实体
*
* @author gongjp
* @since 2024/08/27 15:28
*/
@Data
@TableName("sys_region")
public class RegionDO{
@Serial
private static final long serialVersionUID = 1L;
private Long id;
/**
*
*/
private Long code;
/**
* 名称
*/
private String name;
/**
* 级别1-5,省市县镇村
*/
private Integer level;
/**
* 父级区划代码
*/
private Long pid;
/**
* 城乡分类
*/
private Integer category;
/**
*
*/
private String longitude;
/**
*
*/
private String latitude;
/**
*
*/
private BigDecimal zoom;
/**
*
*/
private String regionIds;
/**
*
*/
private String parentNames;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 县/区
*/
private String district;
/**
* 城镇
*/
private String town;
/**
* 村
*/
private String village;
}