您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用java怎么獲取國家統計局行政區,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1、該程序可根據需求取所需的省、市、縣、鄉鎮(街道)、村(居)委會,代碼為12位;
2、獲取的年份可以更換;
3、可以根據需求寫入數據庫,方便使用,每年可更新維護一次;
4、國家統計局有訪問限制,不宜一次性獲取全國全部數據,建議可按照省份進行劃分,分段獲取 ;
實現代碼如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.List;
/**
從國家統計局獲取行政區劃
國家統計局-NBOS(National Bureau of Statistics)
*/
/** * 讀省的信息 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String url = baseUrl + "index.html"; //如果需要設置代理 //initProxy("xx.xx.xx.xx", "xx"); String str = getContent(url).toUpperCase(); String[] arrs = str.split("<A"); for (String s : arrs) { if (s.indexOf("HREF") != -1 && s.indexOf(".HTML") != -1) { String a = s.substring(7, s.indexOf("'>")); String provinceCode = a.substring(0, 2) + "0000000000"; System.out.println("省級CODE:" + provinceCode); String name = s.substring(s.indexOf("'>")+2, s.indexOf("<BR/>")); if(!"北京市".equals(name)){ continue; } System.out.println("獲取省份:"+name); readShi(a,name); } } }
/** * 讀市的數據 * @param list * @throws Exception */ public static void readShi(String url,String name) throws Exception{ String content = getContent(baseUrl+url).toUpperCase(); String[] citys = content.split("CITYTR"); //'><TD><A HREF='11/1101.HTML'>110100000000</A></TD><TD><A HREF='11/1101.HTML'>市轄區</A></TD></td><TR CLASS=' for(int c=1,len=citys.length; c<len; c++){ String[] strs = citys[c].split("<A HREF='"); String cityUrl = null; String cityName = null; for(int si = 1; si<3; si++){ if(si==1){//取鏈接和編碼 cityUrl = strs[si].substring(0, strs[si].indexOf("'>")); String cityCode = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println("cityCode:" + cityCode); }else{ cityName = name+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println("獲取所屬市:" + cityName); } } readXian(cityUrl.substring(0, cityUrl.indexOf("/")+1),cityUrl,cityName); } } /** * 讀縣的數據 * @param url * @throws Exception */ public static void readXian(String prix,String url,String cityName) throws Exception{ String content = getContent(baseUrl+url).toUpperCase(); String[] citys = content.split("COUNTYTR"); for(int i=1; i<citys.length; i++){ String cityUrl = null; String areaName = null; if(citys[i].indexOf("<A HREF='")==-1){ String cityCode = citys[i].substring(6, 18); System.out.println("AreaCode:"+cityCode); areaName = cityName + citys[i].substring(citys[i].indexOf("</TD><TD>")+9,citys[i].lastIndexOf("</TD>")); System.out.println("獲取所屬市轄區:" + areaName); }else{ String[] strs = citys[i].split("<A HREF='"); for(int si = 1; si<3; si++){ if(si==1){//取鏈接和編碼 cityUrl = strs[si].substring(0, strs[si].indexOf("'>")); String cityCode = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println("AreaCode:"+cityCode); }else{ areaName = cityName+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println("獲取所屬市區(或者縣級市):" + areaName); } } } if(null!=cityUrl){ readZhen(prix,cityUrl,areaName); } } } /** * 讀鎮的數據 * @param url * @throws Exception */ public static void readZhen(String prix,String url,String areaName) throws Exception{ String content = getContent(baseUrl+prix+url).toUpperCase(); String myPrix = (prix+url).substring(0, (prix+url).lastIndexOf("/")+1); String[] citys = content.split("TOWNTR"); for(int i=1; i<citys.length; i++){ String[] strs = citys[i].split("<A HREF='"); String cityUrl = null; String towntrName = null; for(int si = 1; si<3; si++){ if(si==1){//取鏈接和編碼 cityUrl = strs[si].substring(0, strs[si].indexOf("'>")); String cityCode = strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println(cityCode); }else{ towntrName = areaName+strs[si].substring(strs[si].indexOf("'>")+2, strs[si].indexOf("</A>")); System.out.println("獲取所屬鄉鎮(街道辦事處):" + towntrName); } } readCun(myPrix,cityUrl,towntrName); } } /** * 讀村/街道的數據 * @param url * @throws Exception */ public static void readCun(String prix,String url,String towntrName) throws Exception{ String content = getContent(baseUrl+prix+url).toUpperCase(); String[] citys = content.split("VILLAGETR"); for(int i=1; i<citys.length; i++){ //村級機構代碼 String villageCode = null; //城鄉分類代碼 String cxfldm = null; //村級名稱 String cunName = null; String[] strs = citys[i].split("<TD>"); villageCode = strs[1].substring(0, strs[1].indexOf("</TD>")); cxfldm = strs[2].substring(0, strs[2].indexOf("</TD>")); cunName = towntrName + strs[3].substring(0, strs[3].indexOf("</TD>")); System.out.println("villageCode:" + villageCode + "***cxfldm:" + cxfldm); System.out.println("所屬村數據:" + cunName); } } //設置代理 public static void initProxy(String host, String port) { System.setProperty("http.proxyType", "4"); System.setProperty("http.proxyPort", port); System.setProperty("http.proxyHost", host); System.setProperty("http.proxySet", "true"); } //獲取網頁的內容 public static String getContent(String strUrl) throws Exception { try { //防止沒有檢查到cookie,一直循環重定向 CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); URL url = new URL(strUrl); java.net.HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //因為沒有驗證通過,導致沒有跳到下一個地址,還是返回當前地址。 //這樣的結果是,相同地址不斷地跳回自己,變成死循環。20次以后,就報異常了 //java.net.ProtocolException: Server redirected too many times (20) conn.setInstanceFollowRedirects(false); BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(CHARSET))); String s = ""; StringBuffer sb = new StringBuffer(""); while ((s = br.readLine()) != null) { sb.append(s); } br.close(); return sb.toString(); } catch (Exception e) { System.out.println("can't open url:"+strUrl); throw e; } }
}
上述就是小編為大家分享的使用java怎么獲取國家統計局行政區了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。