java爬取省,市,县(区),乡(镇),村委会五级行政单位源码

package com.jq.chendongliang;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
/**
 * 全国省市县镇村数据爬取
 * @author chendongliang
 * @date 2018-12-14 下午22:51:39
 * @version 1.0.0
 */
public class GetAddress{
	private static Map<Integer, String> cssMap = new HashMap<Integer, String>();
	 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 Exception{
		 int level = 1;
	        // 获取全国各个省级信息
	        Document connect = connect("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/");  
	        Elements rowProvince = connect.select("tr." + cssMap.get(level));
	        int num=1;//记录省级行政单位个数
	        for (Element provinceElement : rowProvince){
	        	      //获取第一级行政单位
	        	       List<Node> child=provinceElement.childNodes();
	        	       for(Node  chi : child){
	        	    	   List<Node> ch=chi.childNodes();
		        	       List<Node>  ss=ch.get(0).childNodes();
		        	       Node  s=ss.get(0);
		        	       String Cyte=s.toString();
		        	       System.out.println(Cyte+num);
		        	       num++;
		        	      //获取除级行政单位 以外的行政级别
		        	      Elements select =provinceElement.select("a");
		        	      for (Element province : select){
		        	    	  List<Node>  pro=province.childNodes();
		        	    	  String cy= pro.get(0).toString();
		        	    	  //判断是否是同一个一级行政单位,如果是,跳出当次循环
		        	    	  if(!Cyte.equals(cy)){
		        	    		   continue;
		        	    	  }
 			            	   parseNextLevel(province, level + 1);
			               }
	                  }
	          }   
	 }
	  private static void parseNextLevel(Element parentElement, int level) throws Exception{
		  try {
	            Thread.sleep(10);//睡眠一下,否则可能出现各种错误状态码
	        }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){
	        			if(level<3){
	        			  parseNextLevel(select.last(), level + 1);
	        			}
	        		  }
	        	  }
	        }
	  }
	  static int i=1;
	  private static void printInfo(Element element, int level) throws Exception{
        String value=element.select("td").last().text();
	    //String code=element.select("td").first().text();
        switch(level){
		      //获取地级市
             case 3:System.out.println("----"+value);
                 break;
            //获取县(区)、县级市
             case 4:System.out.println("----------"+value+i);
                    i++;
                break;
            //获取镇(乡)
             case 5:System.out.println("-----------"+value);
                break;
            //获取村委会
             case 6:System.out.println("---------------------"+value);
                break;
        }  
	  }
	  private static Document connect(String url){
		    if (url == null || url.isEmpty()){
		        throw new IllegalArgumentException("The input url('" + url + "') is invalid!");
		       }else{
		        try {
					return Jsoup.connect(url).timeout(100 * 1000).get();
				   } catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					return null;
				}
		          
	         }	
	  }
}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值