全中国的省市县镇乡村数据获取以及展示java源代码

第一步、准备工作(数据源+工具):

  数据源(截止目前最全面权威的官方数据):http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/

  爬取数据的工具(爬虫工具):http://jsoup.org/

第二、数据源分析:

  首先jsoup工具的使用我在这里就不做讲解了,感兴趣的可以自己动手去查阅。

  做开发就应该多去了解一些软件工具的使用,在平常开发过程中遇到了才知道从何下手,鼓励大家多平时留意一些身边的软件工具,以备不时之需。在做 这个东西以前,我也不知道jsoup要怎么用,但我知道jsoup可以用来干嘛,在我需要的用到的时候,再去查阅资料,自己学习。

第三部、java源代码:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 全国省市县镇村数据爬取
 * @author liushaofeng
 * @date 2015-10-11 上午12:19:39
 * @version 1.0.0
 */
public class JsoupTest
{
    private static Map<Integer, String> cssMap = new HashMap<Integer, String>();
    private static BufferedWriter bufferedWriter = null;

    static
    {
        cssMap.put(1, "provincetr");// 省
        cssMap.put(2, "citytr");// 市
        cssMap.put(3, "countytr");// 县
        cssMap.put(4, "towntr");// 镇
        cssMap.put(5, "villagetr");// 村
    }

    public static void main(String[] args) throws IOException
    {
        int level = 1;

        initFile();

        // 获取全国各个省级信息
        Document connect = connect("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/");
        Elements rowProvince = connect.select("tr." + cssMap.get(level));
        for (Element provinceElement : rowProvince)// 遍历每一行的省份城市
        {
            Elements select = provinceElement.select("a");
            for (Element province : select)// 每一个省份(四川省)
            {
                parseNextLevel(province, level + 1);
            }
        }

        closeStream();
    }

    private static void initFile()
    {
        try
        {
            bufferedWriter = new BufferedWriter(new FileWriter(new File("d:\\CityInfo.txt"), true));
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private static void closeStream()
    {
        if (bufferedWriter != null)
        {
            try
            {
                bufferedWriter.close();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
            bufferedWriter = null;
        }
    }

    private static void parseNextLevel(Element parentElement, int level) throws IOException
    {
        try
        {
            Thread.sleep(500);//睡眠一下,否则可能出现各种错误状态码
        } catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        Document doc = connect(parentElement.attr("abs:href"));
        if (doc != null)
        {
            Elements newsHeadlines = doc.select("tr." + cssMap.get(level));//
            // 获取表格的一行数据
            for (Element element : newsHeadlines)
            {
                printInfo(element, level + 1);
                Elements select = element.select("a");// 在递归调用的时候,这里是判断是否是村一级的数据,村一级的数据没有a标签
                if (select.size() != 0)
                {
                    parseNextLevel(select.last(), level + 1);
                }
            }
        }
    }

    /**
     * 写一行数据到数据文件中去
     * @param element 爬取到的数据元素
     * @param level 城市级别
     */
    private static void printInfo(Element element, int level)
    {
        try
        {
            bufferedWriter.write(element.select("td").last().text() + "{" + level + "}["
                + element.select("td").first().text() + "]");
            bufferedWriter.newLine();
            bufferedWriter.flush();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private static Document connect(String url)
    {
        if (url == null || url.isEmpty())
        {
            throw new IllegalArgumentException("The input url(‘" + url + "‘) is invalid!");
        }
        try
        {
            return Jsoup.connect(url).timeout(100 * 1000).get();
        } catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
    }
}

第三步、插入数据到DB:

按照一定的数据结构插入到对应的表中即可

最后效果图:

www.10086bank.com

以上!

时间: 2024-11-03 03:41:58

全中国的省市县镇乡村数据获取以及展示java源代码的相关文章

Jsoup获取全国地区数据(省市县镇村)(续) 纯干货分享

前几天给大家分享了一下,怎么样通过jsoup来从国家统计局官网获取全国省市县镇村的数据.错过的朋友请点击这里.上文说到抓取到数据以后,我们怎么转换成我们想要格式呢?哈哈,解析方式可能很简单,但是有一点我是知道的,很多人是伸手党,那么我就把我的处理过程给大家分享出来,觉得不错的,请点个赞. 第一步:将获取到的txt文件转换成数据库文件: 这里需要备注一下,下文所有的资源压缩文件,解压密码都是我的博客园昵称.为什么要加密码给大家解释一下:前期发出的博文被其他很多站点爬取了,但是都没有原文链接或者转载

考察一下全中国的地区增长速度

考察一下全中国的地区增长速度,会发现此次经济放缓对部分地区的影响远大于其他地区.也许人们可以预见的是,受影响最大的地区,正好是那些承受能力最弱的地区.http://issuu.com/e16naatqhs http://issuu.com/5h4uwmzwdo http://issuu.com/6p6grfgmjl http://issuu.com/q1o2fcnele http://issuu.com/dqdbv69bie http://issuu.com/b50irkcbhn http://

各级(省市县镇村)行政区域获取

在各种WEB应用中,会填写个人或者企业的地址信息,如下图所示,是京东上填写收货地址的页面截图. 小弟最近也碰到了类似的问题,需要得到所有省份,每个省份下属的市区,没事市区下属的县.乡镇.村这些数据.这方面的数据最权威的莫过于国家统计局(http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/index.html)给出的统计,目前国家统计局给出的最新数据是截止到2013年8月13日的数据,没有香港.澳门特别行政区,没有钓鱼岛,没有三沙市,也没有台

全中国最穷的小伙子发财日记

一本被评价为“迎合了时代需求,直抵中国3亿草根青年神经最敏感之处”的<全中国最穷的小伙子发财日记>3月30日出版.这是一部日记体形式的小说,由曾经是落魄青年,现在成了富翁的“重庆老康”撰写,融合了重庆老康自己和周围朋友的创业经历.该书曾是天涯网热帖,此次由读客图书出版,据出版方介绍,首印即高达30万册. 重庆老康曾经落魄到快混成犀利哥了,于是他开始全面分析自己糟糕的人生,决定从身边着手,去寻找最小最近的机会,老老实实,深入一行.据出版方介绍,身无分文的重庆老康经过三年奋斗,现在拥有一家独资公司

中国象棋V2:Java源代码、毕业设计等所有文档,已经全部提交到CSDN-Code平台

下载地址:https://code.csdn.net/FansUnion/chinesechess-v2 主要内容:Java源代码.毕业设计.API文档.声音图片等资源.Demo截图等一切的一切. 2012年就已经把所有资料上传到CSDN下载频道了,结果总是有网友反馈无法下载或者找不到源码,今天终于解决了这个"历史遗留问题". 如果,把大学阶段完成的中国象棋,一切资料全部分享,上传到CSDN-Code平台,还有网友说找不到源码,那真心不能怪我了. 特别说明: 1.我不想再多费口舌去过多

全中国14亿人不知道的秘密-钱宝网事件 “这一次让世界一起抄中国”

中国社会经济发展历史长河中, 每一个时期的经济发展都有一定的特点,也都遵循着中国传统文化和农业经济的共同规律.经济基础对法律 . 政治.军事.文化艺术乃至人们社会生活等各方面的影响是极其重大的,在社会发展中所起的决定性作用不言而喻. 为什么我从经济方面开头,因为国之根本就是是经济和民生!21世纪的今天,进十几年来我的国,党中央一直支持互联网+实业的时代,万众一心 ,大众创业的国之政策!它的影响力空前,催生了互联网金融的蓬勃发展! 2010年,成都乾坤智能有限公司成立(曾用名江苏钱旺信控集团)CE

适全中国市场的mycncart发布

今天是公历2015年5月2日,http://www.mycncart.com网站正式上线. mycncart是opencart中国团队根据市场需求,二次开发而成的适合中国及华语市场的B2C, B2B电商系统,它遵循GPL3协议,秉承opencart之开源.免费.安全.架构优秀的特点,会获得众多面向中国市场的客户青睐. mycncart系统将跟随opencart系统核心代码升级而升级,同时也会更多地加入中国市场的许多特色功能.建站宗旨是:为中国网站经营者提供一款简单.易用.安全.可扩展性好.成本低

中国各个省市县的人口统计,echart展示

公司要做一个excel形式的人口统计表,我感觉应该更直观一些展示,所以就选用了echart进行展示,由于时间短所以制作的比较简单粗糙,但相应的数据还是有很大的可参考性. 刚好下载了jfinal3.5,使用了undertow作为服务器,做起来还是很方便的,顺便也给jfinal做下广告. 代码下载地址:https://github.com/logonin/pop 使用idea下载后,修改demo-config-dev.txt 文件中的数据库链接地址,导入sql,直接右键运行DemoConfig就可以

中国居民18位身份证号验证方法,Java算法实现

public static boolean validate18Idcard(String idcard){ if(idcard == null ) { return false; } if(idcard.length()!=18) { return false; } char [] id =idcard.toCharArray(); int i, sum, n; for (sum = i = 0; i < 17; i++){ sum += ((1 << (17 - i)) % 11)