零、爬虫个人理解

获取想要的数据。找到网站,访问网址获取到粗数据,使用技术手段解析出我们想要的数据和下层的请求的网址,然后再来一次直到没有下层。如:省->市->县->镇->村

一、导入依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.2</version></dependency>

二、编写代码

import com.sun.istack.internal.NotNull;
import lombok.Data;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.util.ArrayList;
import java.util.List;public class AreaUtil {public static final String baseUrl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/";/*** 爬取国家统计局2020的区域数据*/public static void crawlingAreaByNationalBureauOfStatistics(String url,int lv,String code,@NotNull List<Area> list) {try {Thread.sleep(500L);Document doc = Jsoup.connect(url).maxBodySize(0).get();System.out.println(url);Elements tdElements = doc.select("td");switch (lv){case 1:{Elements aElements = tdElements.select("a");for (Element item : aElements) {if (item.text().indexOf("京ICP备") == -1) {Area area = new Area();area.setCode(item.attributes().get("href").replaceAll(".html",""));area.setName(item.text());area.setParCode(code);list.add(area);String cUrl = url.substring(0,url.lastIndexOf("/")+1) + item.attributes().get("href");crawlingAreaByNationalBureauOfStatistics(cUrl,2,area.getCode(),list);}}};break;case 2:{int index = 0;for(Element item : tdElements){if(item.parent().attributes().get("class").equals("citytr")){if(index%2==0){Area area = new Area();area.setCode(item.select("a").get(0).text());area.setParCode(code);list.add(area);}if(index%2==1){list.get(list.size()-1).setName(item.select("a").get(0).text());String cUrl = url.substring(0,url.lastIndexOf("/")+1) + item.select("a").get(0).attributes().get("href");crawlingAreaByNationalBureauOfStatistics(cUrl,3,list.get(list.size()-1).getCode(),list);}index++;}}};break;case 3:{int index = 0;for(Element item : tdElements){if(item.parent().attributes().get("class").equals("countytr")){if(index%2==0){Area area = new Area();if(index ==0){area.setCode(item.text());}else{area.setCode(item.select("a").get(0).text());}area.setParCode(code);list.add(area);}if(index%2==1){if(index == 1){list.get(list.size()-1).setName(item.text());}else {list.get(list.size()-1).setName(item.select("a").get(0).text());String cUrl = url.substring(0,url.lastIndexOf("/")+1) + item.select("a").get(0).attributes().get("href");crawlingAreaByNationalBureauOfStatistics(cUrl,4,list.get(list.size()-1).getCode(),list);}}index++;}}};break;case 4:{int index = 0;for(Element item : tdElements){if(item.parent().attributes().get("class").equals("towntr")){if(index%2==0){Area area = new Area();area.setCode(item.select("a").get(0).text());area.setParCode(code);list.add(area);}if(index%2==1){list.get(list.size()-1).setName(item.select("a").get(0).text());String cUrl = url.substring(0,url.lastIndexOf("/")+1) + item.select("a").get(0).attributes().get("href");crawlingAreaByNationalBureauOfStatistics(cUrl,5,list.get(list.size()-1).getCode(),list);}index++;}}};break;case 5:{int index = 0;for(Element item : tdElements){if(item.parent().attributes().get("class").equals("villagetr")){if(index%3==0){Area area = new Area();area.setCode(item.text());area.setParCode(code);list.add(area);}if(index%3==1){list.get(list.size()-1).setCode2(item.text());}if(index%3==2){list.get(list.size()-1).setName(item.text());}index++;}}};break;}}catch ( Exception e){System.out.println(e.getMessage());}}public static void main(String[] args) {List<Area> list = new ArrayList<>();crawlingAreaByNationalBureauOfStatistics(baseUrl,3,null,list);list.forEach(System.out::println);}
}
/*** 数据结构*/@Data
class Area {//编码private String code;//编码private String code2;//名称private String name;//父级编码private String parCode;
}

三、结果

四、注意

本来是用多线程去做的,后面发现程序请求不到了数据了,该站点有反爬虫手段,去掉多线程后发现有时也是请求不到,后面又加了Thread.sleep(500L);这样请求的慢会好一点。

Java 爬取行政区划代码相关推荐

  1. java爬取行政区划代码

    1.导入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifac ...

  2. 【Java】Java爬取国家统计局五级行政区划编码(省、市(州)、县(区)、乡(镇)、村)

    今天使用了idea+java爬取国家统计局12位行政区划编码,包括省.市(州).县(区).乡(镇).以及村委会/委员会等的行政编码和名称,将区划编码以及名称保存在数据库中. 本文内容包括数据库数据效果 ...

  3. Java爬取解析去哪儿景点信息

    前言:这两周在做 Web 课的大作业,顺便琢磨了一下如何使用 Java 从网上获取一些数据,现在写这篇博客记录一下. PS:这里仅限交流学习用,如利用代码进行恶意攻击他网站,和作者无关!!! Java ...

  4. 用java爬取学校数据_Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  5. Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索

    Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索 一.资源 为什么接下来的代码中要使用el.getElementsByTa ...

  6. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文 java爬取网页内容 简单例子(1)--使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则 ...

  7. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  8. Java爬取并下载酷狗音乐

    本文方法及代码仅供学习,仅供学习. 案例: 下载酷狗TOP500歌曲,代码用到的代码库包含:Jsoup.HttpClient.fastJson等. 正文: 1.分析是否可以获取到TOP500歌单 打开 ...

  9. java爬取单张图片

    我们经常需要在网页上获取一些图片,有的图片我们是可以直接下载使用,有的图片需要我们登陆账号甚至付费下载,所以在此我写了一个使用Java爬取任意网页单张图片的爬虫. 代码解析 1.图片的网络位置 2.进 ...

  10. java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等)

    java爬取当当网所有分类的图书信息(ISBN,作者,出版社,价格,所属分类等) 顺手写的,没有建立新项目,放我自己的项目的一个文件夹里了,有兴趣的朋友可以拉下来试试 https://gitee.co ...

最新文章

  1. linux驱动模块编译入内核,Linux内核驱动模块编译
  2. 小测一下fastjson的速度(纯娱乐)
  3. 配置ORACLE 客户端连接到数据库
  4. oracle安装实训心得,oracle数据库实训心得.docx
  5. android动画Rotate
  6. 使用清华镜像安装pytorch失败的解决方法
  7. YOLOv1-YOLOv4
  8. 原创:PHP乱码怎么办?五种方法彻底解决PHP乱码问题
  9. import java文件,java 文件夹操作,java文件夹,import java.
  10. java大文件读,java 读大文件报错
  11. python二进制移位_python移位运算的实现
  12. oracle awr报告生成_oracle11g awr报告分析—WORKLOAD REPOSITORY report
  13. MariaDB数据库服务常见操作
  14. Fiddler的一系列学习瞎记3
  15. php_l3arning_notes_2
  16. UIView你知道多少
  17. 局域网管理工具_局域网vnc远程控制软件,七款免费又好用的局域网vnc远程控制...
  18. osgEarth的Rex引擎原理分析(一二二)着色器程序的opengl过程
  19. iOS 应用内直接评分问题
  20. 分布式一致性哈希分析

热门文章

  1. chrome 截长图功能
  2. 地址总线、数据总线、控制总线详细解释
  3. malloc函数和free函数的使用方法解析
  4. html 一键发送给微信朋友圈,微信朋友圈如何转发别人说说(朋友圈一键集赞神器)...
  5. codesys 轴程序
  6. 整数规划:分支定界法
  7. 内网基础-隧道技术、内网穿透(SSH隧道、Socket隧道、跨路由扫描)
  8. printf输出格式
  9. Lingo教育版免费申请流程
  10. MII、RMII、GMII、RGMII接口详解及硬件设计注意事项