SpringBoot集成Jsoup爬虫——三级列表

SpringBoot集成Jsoup爬虫

爬取三级行政区域划分,三级列表,存入数据库中


前言

爬取获取三级行政区域划分,三级列表,根据三级划分将区域代码和城市存入数据库中


提示:以下是本篇文章正文内容,下面案例可供参考

一、爬虫是什么?

网络爬虫为一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。

二、使用步骤

1.引入库

代码如下(示例):


import crawl.JdbcUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

2.爬虫过程

代码如下(示例):

    String result = "";
    String charset = "UTF-8";

    try {
        URL url = new URL(strUrl);
        InputStream inputStream = url.openStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName(charset));
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String s;
        StringBuffer stringBuffer = new StringBuffer();
        while ((s = bufferedReader.readLine()) != null) {
            stringBuffer.append(s);
        }
        result = stringBuffer.toString();
    } catch (Exception e) {
        System.out.println("错误信息");
        e.printStackTrace();
    }
    return result;
}
    Document document = Jsoup.parse(content);
    Elements element = document.select("table").select("tr");
    // 记录省
    String province = "";
    // 记录市
    String city = "";
    // 记录编码
    String code = "";
    String[] dataArr = new String[5];
    boolean flag = false;
    for (int i = 0; i < element.size(); i++) {
        String str = element.get(i).text();
        if (flag == true) {
            break;
        }
        dataArr = str.split(" ");
        // 从省开始判断
        if (i < 3) {
            continue;
        }
        code = dataArr[0];
        if (code.endsWith("0000")) {
            // 省
            province = str;
            Map<String, List<String>> cityMap = new HashMap<>();
            countryMap.put(str, cityMap);
        } else if(code.endsWith("00") && !code.endsWith("0000")) {
            // 市
            city = str;
            Map<String, List<String>> cityMap = countryMap.get(province);
            cityMap.put(str, new ArrayList<String>());
        } else {
            // 区
            // 取出市
            Map<String, List<String>> cityMap = countryMap.get(province);
            // 取出区
            List<String> classifyList = cityMap.get(city);
            // 如果classify为null,没有走市的if判断,这是一个直辖市
            if (classifyList == null) {
                // 市为空,将北京省当做市
                classifyList = new ArrayList<>();
                cityMap.put(city, classifyList);
                city = province;
            }
            classifyList.add(str);
        }
        if (str.startsWith("820000")) {
            flag = true;
        }
        }

总结

知识点,基本类型和包装类型的值传递和引用传递。List,Map是引用传递,在别处进行add或者put,Map和List中的数据都将跟着变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值