当前位置:首页JavaJava如何爬虫获取各省行政区划

Java如何爬虫获取各省行政区划

一、核心代码

代码以内蒙古行政区划为例

前提准备

  • 内蒙古的行政区划代码shengCode(如需其他地区需要修改这个字段),对应的shengName也需要修改,
  • 行政区划以下例子只取了省、市、县层级分别用1、2、3表示
  • 数据来源 全国行政区划信息
  • 代码中url来源于下图(一定要点省份查询,然后再复制url)

image-20250320164407553

        //内蒙古
        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;

}

三、展示

image-20250320164732480

给TA打赏
共{{data.count}}人
人已打赏
源码分享

Java程序加密解密源码分享

2022-9-23 13:25:41

Java

ApplicationEvent 使用指南

2025-7-21 17:54:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
有新私信 私信列表
搜索