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;
}
}