DAY02.使用JAVA从国家统计局爬取2020年全国统计用区划代码和城乡划分代码(省市区数据)


  项目需求,,国家省市区名称代码,网上找了一圈2020年的都不是免费的,后来就自己做了个爬虫,因为自己本身做的时JAVA 开发,平常也没学过python,所以只能使用Java做一个爬虫,爬国家统计局的2020年城乡统计,爬到了村居委会一级共67w条数据

day01:https://blog.csdn.net/weixin_43638187/article/details/110220248
源码及2020年数据 :https://github.com/zhouqiang0821/smallTools
数据是在:https://wws.lanzous.com/b01zvqqch密码:bvlt
base_region_detail.sql :是统计到乡镇、村社区的数据,另一个没那么全

1 获取数据

 1.1  爬取省数据

    首先就是获取每一个省,然后根据每一个省层层往下扒,直到获取完这个省下边的所有市县村,在获取下一个省的数据
    获取所有省的URL:

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/

 省的官方数据结构


在这里插入图片描述

  可以看到需要的数据是从一个class=‘provincetr’ 下的 <a> 标签中拿到的,我们主要的任务就是拿到class=‘provincetr’,并遍历获取所有 <td> 下的 <a> 标签 中数据,根据这个 *.html获取这个省下边的所有市信息.

        /***
         * 获取省信息
         */
        public void getProvince() throws InterruptedException {
   
            // 初始化 httpClint
            initHttpClint();
            // 从index.html 中获取所有 省、直辖市、自治区 数据
            Document doc = Jsoup.parse(toGet("/index.html"));
            Elements provincetrEles = doc.getElementsByClass("provincetr");
            // 查找数据库中保存的最后一个省的regionCode
            List<String> provinceCodeList = baseRegionDetailDao.getAllProvince();
            for (Element e :
                    provincetrEles) {
   
                Elements tdEles = e.getElementsByTag("td");
                for (Element td :
                        tdEles) {
   
                    Elements a = td.select("a");
                    if (!a.isEmpty()) {
   
                        // 解析数据 获取 指向市的href
                        String href = td.select("a").attr("href");
                        // 获取省份名称
                        String name = td.select("a").text().trim();
                        // 获取省份代码
                        String areaCode = "";
                        areaCode = href.substring(0, href.indexOf(".")) + "00";
                        String last2code = getLast2code(href, 0, 2);
    
                        // 判断 数据库中 没有省信息 则证明是第一次爬取
                        if (provinceCodeList == null || !provinceCodeList.contains(areaCode)) {
   
                            System.out.println("--------------省-------------");
                            System.out.println("省: " + name + " 代码:" + areaCode + " href:" + href);
                            // 保存省信息数据
                            ArrayList<BaseRegionDetailModel> list = new ArrayList<>();
                            list.add(createModel(name, areaCode, "0", "0"));
                            baseRegionDetailDao.insert(list);
                            getCity(toGet(href), areaCode
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值