StarSpider 星蛛 爬虫 Java框架 可以实现 lazy爬取 实现 HTML 文件的编译,子标签缓存等操作

StarSpider 星蛛 爬虫 Java框架

开源技术栏

StarSpider 能够实现 针对 HTML XSS SQL 数学表达式等杂乱数据的 爬取 解析 提取 需求!

目录

文章目录

  • StarSpider 星蛛 爬虫 Java框架
    • 目录
    • 介绍
      • 如何获取?
        • maven配置
      • 架构是什么样的?
        • 结果对象的类型与作用
        • 解析组件的类型与作用
    • 有哪些功能?
      • 简单入门
      • 标签文本的解析
      • HTML或XML属性的查找
      • 数学表达式的提取
      • 正则表达式的匹配
      • Json字符串的解析
      • sql 语句的解析
    • 更新日志
      • 1.1 版本更新于 2025-01-26
    • 更多信息

介绍

1703711668101.jpg
星蛛解析库是一款针对数据解析提供的库,其中内置诸多数据解析组件,支持对网络数据包,文件对象,以及字符串对象进行解析,是Java实现的一种数据解析手段,是可以实现爬虫,智能提取等需求的强悍工具。

如何获取?

目前该组件已支持maven与gradle两种方式获取。

maven配置

<dependencies><dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>StarSpider</artifactId><version>1.1</version></dependency><!-- 依赖导入 您可以自己选择版本!!! --><dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>mathematical-expression</artifactId><version>1.4.7</version><!-- 至少要 1.4.7 版本 --></dependency><dependency><groupId>io.github.BeardedManZhao</groupId><artifactId>SQLStringInFo</artifactId><version>1.1</version><!-- 支持所有版本 --></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.21</version><!-- 至少要 2.0.21 版本 --></dependency>
</dependencies>

架构是什么样的?

在框架中,用户直接与星蛛门户类(parser.io.github.beardedManZhao.starSpider.StarSpider)进行交互,通过该类,可对URL,FILE,String,三种对象进行内容提取与解析,用户可以根据自己的需求向星蛛解析函数中传递形参,实现不同效果。

星蛛门户会根据用户传递的形参,从哈希表中获取到对应的组件进行数据解析,并将组件解析结果对象直接通过星蛛门户类(parser.io.github.beardedManZhao.starSpider.StarSpider)
返回给用户,用户可根据结果中的各类函数进行更多的操作,目前的结果对象有如下几种。

结果对象的类型与作用
结果对象数据类型该结果类型对应的提取组件该结果类型的特有功能该结果类型的支持版本
io.github.beardedManZhao.starSpider.container.LABELDocumentio.github.beardedManZhao.starSpider.parser.LABELParser面向标签节点进行数据提取操作v1.0
io.github.beardedManZhao.starSpider.container.HTMLDocumentio.github.beardedManZhao.starSpider.parser.HTMLParser面向标签节点与节点属性进行数据提取操作,是LABEL结果对象的子类实现v1.0
io.github.beardedManZhao.starSpider.container.ExpressionDataio.github.beardedManZhao.starSpider.parser.MEParser面向每一个数学表达式进行数据提取操作v1.0
io.github.beardedManZhao.starSpider.container.StringDataio.github.beardedManZhao.starSpider.parser.PatternParser面向每一个符合提取条件的字符串v1.0
io.github.beardedManZhao.starSpider.container.SQLStringDataio.github.beardedManZhao.starSpider.parser.SQLStringParser面向每一个SQL语句进行语义解析操作v1.0
io.github.beardedManZhao.starSpider.container.FastJsonDocumentio.github.beardedManZhao.starSpider.parser.FastJsonParser面向json字符串中每一个json节点进行提取操作。v1.0
解析组件的类型与作用
组件名称(常量区中的常量名)组件类型作者主页面向格式已注册至门户组件作用组件支持版本
NULLio.github.beardedManZhao.parser.starSpider.StarSpiderhttps://github.com/BeardedManZhaoURL, FILE, StringNO与用户进行直接交互,根据用户的需求调整框架内部的结构并提交解析数据的任务v1.0
PARSER_NAME_LABELio.github.beardedManZhao.parser.starSpider.LABELParserhttps://github.com/BeardedManZhao使用标签格式的字符串YES提取与解析标签数据中的每一个节点v1.0
PARSER_NAME_HTMLio.github.beardedManZhao.parser.starSpider.HTMLParserhttps://github.com/BeardedManZhaoHTML XMLYES通过节点名称或节点属性,提取与解析HTML与XML中的每一个节点,并返回具有相对节点解析功能的结果对象v1.0
PARSER_NAME_REGEXPio.github.beardedManZhao.parser.starSpider.PatternParserhttps://github.com/BeardedManZhaoStringYES通过用户提供的正则表达式解析任意文本中的内容,提取出符合正则表达式的所有数据v1.0
PARSER_NAME_MEio.github.beardedManZhao.parser.starSpider.MEParserhttps://github.com/BeardedManZhaoStringYES智能提取出所有数学表达式,并通过ME框架进行表达式计算,返回结果v1.0
PARSER_NAME_SQL_STRING_INFOio.github.beardedManZhao.parser.starSpider.SQLStringParserhttps://github.com/BeardedManZhao/SQLStringInFoSQLStringYES智能提取出所有的SQL语句,并通过SQLStringINFO解析库对语句进行解析,然后返回结果v1.0
PARSER_NAME_FASTJSONio.github.beardedManZhao.parser.starSpider.FastJsonParserhttps://github.com/alibabaJsonYES针对JSON进行解析的库,将FastJson接入到门户,它返回的结果就是一个JSONObject对象v1.0
Dear friendsNO事实上,我们希望有更多人可以将自己的实现提供给我们,由各位亲自将自己的组件接入至星蛛门户

有哪些功能?

在星蛛门户中,用户可以直接通过parse函数设置参数与解析对象,进而获取到解析结果,在库中的解析工作由解析器进行,解析器的实现有很多,每一个注册到星蛛的组件都可以使用门户访问到,接下来就展示下更多的信息。

简单入门

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.HTMLDocument;
import io.github.beardedManZhao.starSpider.parser.StarSpider;import java.io.File;
import java.io.IOException;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) throws IOException {// 构建需要爬取页面的URL// URL url = new URL("https://xxx.xxx.xxx/xxx"); 可以使用url进行数据的解析// 也可使用文件对象,在这里我们对一个文本数据进行爬取 这个文本数据可以在本文中的 测试标签页面 看到哦!File file = new File("F:\\MyGithub\\StarSpider\\src\\main\\resources\\Test.html");// 获取到其中所有的 class 为 odd 的标签 下面的参数中 "attr" 代表的就是按照属性解析,"nodePath" 代表的是按照路径解析HTMLDocument[] parse = (HTMLDocument[]) StarSpider.parse(file, ConstantRegion.PARSER_NAME_HTML, "attr", "class", "odd");for (HTMLDocument container : parse) {// 获取到标签中的文本System.out.println(container.getChildrenText());// 获取到标签属性System.out.println(container.getAttribs());// 直接打印它的 htmlSystem.out.println(container.HTMLData);// 还可以继续解析到其内部的节点HTMLDocument[] tds = container.getAllChildrenByNodeName("td");// 为了方便 在这只打印第一个 td 的文本System.out.println(tds[0]);// 分割行 方便各位看哦System.out.println();}}
}

标签文本的解析

标签文本的典型例子就是HTML,针对这类文本的解析任务,可以使用label组件(LABELParser),具体使用方式如下所示

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.LABELDocument;
import io.github.beardedManZhao.starSpider.parser.StarSpider;import java.io.File;
import java.io.IOException;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) throws IOException {// 构建需要爬取页面的URL// URL url = new URL("https://xxx.xxx.xxx/xxx"); 可以使用url进行数据的解析// 也可使用文件对象,在这里我们对一个文本数据进行爬取File file = new File("F:\\MyGithub\\StarSpider\\src\\main\\resources\\Test.html");// 使用星蛛解析组件,对file对象进行LABEL页面的解析(也可以对url进行解析) 按照节点路径 table > tbody// LABELDocument[] parses1 = (LABELDocument[]) StarSpider.parse(url, ConstantRegion.PARSER_NAME_LABEL, "nodePath", "table", "tbody");LABELDocument[] parses1 = (LABELDocument[]) StarSpider.parse(file, ConstantRegion.PARSER_NAME_LABEL, "nodePath", "table", "tbody");// 迭代每一个被解析到的节点文档对象for (LABELDocument labelDocument : parses1) {// 获取节点名称System.out.println(labelDocument.getName());// 获取节点数据System.out.println(labelDocument.getText());// 获取节点属性(id的值)System.out.println(labelDocument.getAttrib("id"));// 获取该节点下所有子节点的字符串数据(也可以获取到数组形式的数据)System.out.println(labelDocument.getChildrenText());System.out.println("+---------------------------------------------------------------------------------------+");}// 使用星蛛解析组件,对file对象进行LABEL页面的爬取 按照节点[tr]LABELDocument[] parses2 = (LABELDocument[]) StarSpider.parse(file, ConstantRegion.PARSER_NAME_LABEL, "node", "tr");// 迭代获取到的所有tr标签for (LABELDocument container : parses2) {// 将每一个tr标签以及标签子节点的数据以数组的形式获取到(也可以像上面一样使用getChildrenText直接获取字符串)String[] childrenTextArray = container.getChildrenTextArray(false);if (childrenTextArray.length >= 3) {System.out.println(childrenTextArray[0] + "\t|\t" +childrenTextArray[1] + "\t|\t" +childrenTextArray[2] + "\t|\t");}}}
}

HTML或XML属性的查找

在库中有一个组件HTMLParser是专用于提取HTML与XML这类数据的,它在label组件(LABELParser)的基础上拓展了一个新的功能,就是通过属性查找,它具有label组件的所有功能,同时为HTML
XML这两类文本的爬取进行了优化,使得该组件针对HTML与XML的爬取性能要好得多,为演示效果,准备好了这样的一份文件,文件内容如下所示。

<html lang="zh_CN">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<head><title>测试标签页面</title>
</head>
<body>
<h1 id="StarSpider">StarSpider</h1>
<h2 id="介绍">介绍</h2>
<p>星蛛解析库是一款针对数据解析提供的库,其中内置诸多数据解析组件,支持对网络数据包,文件对象,以及字符串对象进行解析,是Java实现的一种数据解析手段,是可以实现爬虫,智能提取等需求的强悍工具。</p>
<h3 id="架构是什么样的">架构是什么样的?</h3>
<p>在框架中,用户直接与星蛛门户类(starSpider.parser.StarSpider)进行交互,通过该类,可对URL,FILE,String,三种对象进行内容提取与解析,用户可以根据自己的需求向星蛛解析函数中传递形参,实现不同效果。</p>
<p>星蛛门户会根据用户传递的形参,从哈希表中获取到对应的组件进行数据解析,并将组件解析结果对象直接通过星蛛门户类(starSpider.parser.StarSpider)返回给用户,用户可根据结果中的各类函数进行更多的操作,目前的结果对象有如下几种。</p>
<h4 id="结果对象的类型与作用">结果对象的类型与作用</h4>
<table id="table1"><colgroup><col style="width: 31%"/><col style="width: 27%"/><col style="width: 31%"/><col style="width: 10%"/></colgroup><thead><tr class="header"><th>结果对象数据类型</th><th>该结果类型对应的提取组件</th><th>该结果类型的特有功能</th><th>该结果类型的支持版本</th></tr></thead><tbody id="tb-1"><tr class="odd"><td>io.github.beardedManZhao.starSpider.container.LABELDocument</td><td>io.github.beardedManZhao.starSpider.parser.LABELParser</td><td>面向标签节点进行数据提取操作</td><td>v1.0</td></tr><tr class="even"><td>io.github.beardedManZhao.starSpider.container.HTMLDocument</td><td>io.github.beardedManZhao.starSpider.parser.HTMLParser</td><td>面向标签节点与节点属性进行数据提取操作,是LABEL结果对象的子类实现</td><td>v1.0</td></tr><tr class="odd"><td>io.github.beardedManZhao.starSpider.container.ExpressionData</td><td>io.github.beardedManZhao.starSpider.parser.MEParser</td><td>面向每一个数学表达式进行数据提取操作</td><td>v1.0</td></tr><tr class="even"><td>io.github.beardedManZhao.starSpider.container.StringData</td><td>io.github.beardedManZhao.starSpider.parser.PatternParser</td><td>面向每一个符合提取条件的字符串</td><td>v1.0</td></tr></tbody>
</table>
<h4 id="解析组件的类型与作用">解析组件的类型与作用</h4>
<table id="table2" style="width:100%;"><colgroup><col style="width: 11%"/><col style="width: 20%"/><col style="width: 19%"/><col style="width: 10%"/><col style="width: 4%"/><col style="width: 29%"/><col style="width: 4%"/></colgroup><thead><tr class="header"><th>组件名称(常量区中的常量名)</th><th>组件类型</th><th>作者主页</th><th>面向格式</th><th>已注册至门户</th><th>组件作用</th><th>组件支持版本</th></tr></thead><tbody><tr class="odd"><td>NULL</td><td>io.github.beardedManZhao.starSpider.parser.StarSpider</td><td>https://github.com/BeardedManZhao</td><td>URL, FILE, String</td><td>NO</td><td>与用户进行直接交互,根据用户的需求调整框架内部的结构并提交解析数据的任务</td><td>v1.0</td></tr><tr class="even"><td>PARSER_NAME_LABEL</td><td>io.github.beardedManZhao.starSpider.container.LABELDocument</td><td>https://github.com/BeardedManZhao</td><td>任何使用标签进行数据存储的文本内容</td><td>YES</td><td>提取与解析标签数据中的每一个节点</td><td>v1.0</td></tr><tr class="odd"><td>PARSER_NAME_HTML</td><td>io.github.beardedManZhao.starSpider.container.HTMLDocument</td><td>https://github.com/BeardedManZhao</td><td>HTML XML</td><td>YES</td><td>通过节点名称或节点属性,提取与解析HTML与XML中的每一个节点,并返回具有相对节点解析功能的结果对象</td><td>v1.0</td></tr><tr class="even"><td>PARSER_NAME_REGEXP</td><td>io.github.beardedManZhao.starSpider.parser.PatternParser</td><td>https://github.com/BeardedManZhao</td><td>String</td><td>YES</td><td>通过用户提供的正则表达式解析任意文本中的内容,提取出符合正则表达式的所有数据</td><td>v1.0</td></tr><tr class="odd"><td>PARSER_NAME_ME</td><td>io.github.beardedManZhao.starSpider.parser.MEParser</td><td>https://github.com/BeardedManZhao</td><td>String</td><td>YES</td><td>智能提取出所有数学表达式,并通过ME框架进行表达式计算,返回结果</td><td>v1.0</td></tr><tr class="even"><td></td><td></td><td>Dear friends</td><td></td><td>NO</td><td>事实上,我们希望有更多人可以将自己的实现提供给我们,由各位亲自将自己的组件接入至星蛛门户</td><td></td></tr></tbody>
</table>
<h2 id="有哪些功能">有哪些功能?</h2>
<p>在星蛛门户中,用户可以直接通过parse函数设置参数与解析对象,进而获取到解析结果,在库中的解析工作由解析器进行,解析器的实现有很多,每一个注册到星蛛的组件都可以使用门户访问到,接下来就展示下更多的信息。</p>
<h3 id="标签文本的解析">标签文本的解析</h3>
<h3 id="html或xml属性的查找">HTML或XML属性的查找</h3>
<h3 id="数学表达式的提取">数学表达式的提取</h3>
<h3 id="正则表达式的匹配">正则表达式的匹配</h3>
</body>
</html>

其中有两个表,表标签中有一个id属性,两张表的id属性不同,现在我们想要获取到第二张表的节点对象,具体操作方式如下所示(展示的是通过属性获取,通过节点获取的方式与LABELParser是一样的)。

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.HTMLDocument;
import io.github.beardedManZhao.starSpider.parser.StarSpider;import java.io.File;
import java.io.IOException;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) throws IOException {// 构建需要爬取页面的URL// URL url = new URL("https://xxx.xxx.xxx/xxx"); 可以使用url进行数据的解析// 也可使用文件对象,在这里我们对一个文本数据进行爬取File file = new File("F:\\MyGitHub\\StarSpider\\src\\main\\resources\\Test.html");// 使用星蛛库将文件中 id 属性为 table2 的文件数据提取出来HTMLDocument[] parse = (HTMLDocument[]) StarSpider.parse(file, ConstantRegion.PARSER_NAME_HTML, "attr", "id", "table2");// 获取到当前节点下的所有tr标签for (HTMLDocument htmlDocument : parse[0].getAllChildrenByNodeName("tr")) {// 打印tr 标签的数据System.out.println(htmlDocument.getChildrenText());// 还可以按照属性或标签名字继续获取 tr 下面的节点数据HTMLDocument[] tds = htmlDocument.getAllChildrenByNodeName("td");System.out.printf("当前节点下面还有 %d 个 td 标签%n", tds.length);// 下面是按照属性的HTMLDocument[] allChildrenByNodeAttrib = htmlDocument.getAllChildrenByNodeAttrib("class", "td1");System.out.printf("当前节点下面还有 %d 个 class属性为td1 的标签%n%n", allChildrenByNodeAttrib.length);}}
}
  • 提取结果
组件名称(常量区中的常量名)	组件类型	作者主页	面向格式	已注册至门户	组件作用	组件支持版本	
NULL	io.github.beardedManZhao.starSpider.parser.StarSpider	https://github.com/BeardedManZhao	URL, FILE, String	NO	与用户进行直接交互,根据用户的需求调整框架内部的结构并提交解析数据的任务	v1.0	
PARSER_NAME_LABEL	io.github.beardedManZhao.starSpider.container.LABELDocument	https://github.com/BeardedManZhao	任何使用标签进行数据存储的文本内容	YES	提取与解析标签数据中的每一个节点	v1.0	
PARSER_NAME_HTML	io.github.beardedManZhao.starSpider.container.HTMLDocument	https://github.com/BeardedManZhao	HTML XML	YES	通过节点名称或节点属性,提取与解析HTML与XML中的每一个节点,并返回具有相对节点解析功能的结果对象	v1.0	
PARSER_NAME_REGEXP	io.github.beardedManZhao.starSpider.parser.PatternParser	https://github.com/BeardedManZhao	String	YES	通过用户提供的正则表达式解析任意文本中的内容,提取出符合正则表达式的所有数据	v1.0	
PARSER_NAME_ME	io.github.beardedManZhao.starSpider.parser.MEParser	https://github.com/BeardedManZhao	String	YES	智能提取出所有数学表达式,并通过ME框架进行表达式计算,返回结果	v1.0	
…	…	Dear friends	…	NO	事实上,我们希望有更多人可以将自己的实现提供给我们,由各位亲自将自己的组件接入至星蛛门户	…	

数学表达式的提取

针对一段包含数学表达式的混乱无格式的数据,库中有一个组件(parser.io.github.beardedManZhao.starSpider.MEParser)可以提取出所有的数学表达式,并根据用户传递的参数来判断是否需要计算出结果,接下来就是该组件的使用演示(在这里直接爬取百度百科一个页面中的所有数学表达式)。

package io.github.beardedManZhao.starSpider;
import io.github.beardedManZhao.starSpider.container.ExpressionData;
import io.github.beardedManZhao.starSpider.parser.StarSpider;import java.io.IOException;
import java.net.URL;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) throws IOException {// 构建需要解析的url,这里是百度百科的网站页面URL url1 = new URL("https://baike.baidu.com/item/%E8%A1%A8%E8%BE%BE%E5%BC%8F/7655228");// 使用星蛛组件,对url对象进行数学表达式的智能提取与计算,这里指定使用的解析组件为ME(表达式解析组件)以及计算模式(brackets)ExpressionData[] parse = (ExpressionData[]) StarSpider.parse(url1, ConstantRegion.PARSER_NAME_ME, "brackets");for (ExpressionData expressionData : parse) {System.out.println("提取到表达式【" + expressionData.getName() + "】 = " + expressionData.getText());}}
}

正则表达式的匹配

用户如果想要使用正则表达式提取数据,库中也有一个组件支持用户进行这样的操作,接下来就是该组件的使用演示。

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.Container;
import io.github.beardedManZhao.starSpider.parser.StarSpider;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) {// 提取出一个字符串中所有的数值Container[] regulars = StarSpider.parse("zhaodsandjsaklfdhajkndfjsdhfaudSUD123HDUSIFCNDJNJDKS678DJSKAF2341233HDSD","regular", "\\d+");for (Container regular : regulars) {System.out.println(regular.getText());}}
}
  • 打印结果
123
678
2341233

Json字符串的解析

在门户中,同样存在着Json解析器被注册,它非常适用于Json文件的解析,在本框架中,将fastJson
作为FastJsonDocument的底层实现,FastJsonDocument遵循fastJson的JSONObject类的操作方式,使得具有FastJson经验的用户在使用FastJsonDocument的时候能够快速上手,接下来就是有关FastJsonDocument的一些操作示例。

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.FastJsonDocument;
import io.github.beardedManZhao.starSpider.parser.StarSpider;import java.io.File;
import java.io.IOException;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) throws IOException {File file = new File("F:\\MyGitHub\\StarSpider\\src\\main\\resources\\testJson.json");// 获取到json 文件中的data1与two,并以json格式解析它// 返回解析到的结果,这里是data1的结果对象与two组成的数组FastJsonDocument[] parse = (FastJsonDocument[]) StarSpider.parse(file, ConstantRegion.PARSER_NAME_FASTJSON, "json", "data1", "two");for (FastJsonDocument container : parse) {// 在这里就是针对每一个FastJsonDocument的获取数据操作,其中的函数风格符合JSONObject,减少学习成本if (container.isJObject) {// 如果当前节点返回的是一个jsonObject,就可以使用JSONObject风格的函数System.out.println(container.getName() + '\t' + container.getText() + '\t' + container.getString("key1"));} else {// 如果当前节点返回的不是一个jsonObject,那么就不可以进行JSONObject的函数调用// 但基础函数还是可以调用的,例如获取节点名称和节点数据等操作System.out.println(container.getName() + '\t' + container.getText());}}}
}
  • 打印结果
data1	{"key1":"value1年后suiadhs468237&*……&*","key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6"}	value1年后suiadhs468237&*……&*
two     {"data1":{"key1":[1,2,3,4,5],"key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6"}}	                null

sql 语句的解析

package io.github.beardedManZhao.starSpider;import io.github.beardedManZhao.starSpider.container.SQLStringData;
import io.github.beardedManZhao.starSpider.parser.StarSpider;/*** 测试用例类** @author zhao*/
public final class MAIN {public static void main(String[] args) {System.out.println("版本:" + StarSpider.VERSION);// 准备一个需要被解析的 sql 脚本String data = "alter table zhao1 add test varchar(20);\n" +"alter table zhao1 drop test;\n" +"# 重命名列字段\n" +"alter table zhao1 change age age1 int;\n" +"# 重命名表名称\n" +"alter table zhao1 rename zhao;\n" +"# 加索引\n" +"alter table zhao add index indexName (name, age1);\n" +"# 加主键索引\n" +"alter table zhao add primary key (name);\n" +"# 加唯一索引\n" +"alter table zhao add unique (name);\n" +"\n" +"create table zhao2 \n" +"as \n" +"select * from student join achievement join (select * from zhao) join zhao1231;\n" +"hasiod;\n" +"\n" +"select * from zhao;";// 使用 PARSER_NAME_SQL_STRING_INFO 解析出 alter 的语句SQLStringData[] alters = (SQLStringData[]) StarSpider.parse(data, ConstantRegion.PARSER_NAME_SQL_STRING_INFO, "alter");for (SQLStringData alter : alters) {// alter 就是解析出来的语句对象包装类// 在这里我们简单的将所有 alter 的语句打印了出来System.out.println(alter.getStatement().getSqlStr());}}
}

更新日志

1.1 版本更新于 2025-01-26

  • 为了避免包名冲突,将包名改为了 io.github.beardedManZhao.starSpider
  • 修复了 io.github.beardedManZhao.starSpider.parser.HTMLParser 中使用属性获取只能获取到第一个数据的问题
  • 支持通过 FileReader 获取到需要被爬取的文本数据!
  • 对于 htmlDocument.getAllChildrenBy* 这类方法,进行了缓存,从而减少不必要的解析开销!
  • 优化了代码

更多信息

感谢各位的使用,库中的解析组件将会随时时间的流动而不断优化,如果各位想要将自己实现的组件注册到星蛛中,请将与您项目有关的一些信息发送到邮箱Liming7887@qq.com中,事实上我们很期待将您的实现加入到门户中。


  • date: 2023-12-27
  • 切换至 English document

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1&#xff09;右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…

C++ Primer 成员访问运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

基础入门-算法解密散列对称非对称字典碰撞前后端逆向MD5AESDESRSA

知识点&#xff1a; 0、算法类型-单向散列&对称性&非对称性 1、算法识别加解密-MD5&AES&DES&RSA 2、解密条件寻找-逻辑特征&源码中&JS分析 应用场景&#xff1a; 1、发送数据的时候自动将数据加密发送&#xff08;只需加密即可&#xff09; 安全…

Qt修仙之路2-1 炼丹初成

widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…

【R语言】环境空间

一、环境空间的特点 环境空间是一种特殊类型的变量&#xff0c;它可以像其它变量一样被分配和操作&#xff0c;还可以以参数的形式传递给函数。 R语言中环境空间具有如下3个特点&#xff1a; 1、对象名称唯一性 此特点指的是在不同的环境空间中可以有同名的变量出现&#x…

【redis】缓存设计规范

本文是 Redis 键值设计的 14 个核心规范与最佳实践&#xff0c;按重要程度分层说明&#xff1a; 一、通用数据类型选择 这里我们先给出常规的选择路径图。 以下是对每个步骤的分析&#xff1a; 是否需要排序&#xff1f;&#xff1a; zset&#xff08;有序集合&#xff09;用…

LabVIEW2025中文版软件安装包、工具包、安装教程下载

下载链接&#xff1a;LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后&#xff0c;双击install.exe安装 2、选中“我接受上述2条许可协议”&#xff0c;点击下一步 3、点击下一步&#xff0c;安装NI Packa…

BUU17 [RoarCTF 2019]Easy Calc1

自用 源代码 $(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success"><strong>答案:&l…

Java并发编程笔记

Java并发基础知识补全 启动 启动线程的方式只有&#xff1a; 1、X extends Thread;&#xff0c;然后X.start 2、X implements Runnable&#xff1b;然后交给Thread运行 线程的状态 Java中线程的状态分为6种&#xff1a; 1. 初始(NEW)&#xff1a;新创建了一个线程对象&…

使用多模态大语言模型进行深度学习的图像、文本和语音数据增强

在过去的五年里&#xff0c;研究方向已从传统的机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;方法转向利用大语言模型&#xff08;LLMs&#xff09;&#xff0c;包括多模态方法&#xff0c;用于数据增强&#xff0c;以提高泛化能力&#xff0c;并在…

Windows Docker笔记-Docker拉取镜像

通过在前面的章节《安装docker》中&#xff0c;了解并安装成功了Docker&#xff0c;本章讲述如何使用Docker拉取镜像。 使用Docker&#xff0c;主要是想要创建并运行Docker容器&#xff0c;而容器又要根据Docker镜像来创建&#xff0c;那么首当其冲&#xff0c;必须要先有一个…

Office/WPS接入DS等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐&#xff0c;怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌&#xff0c;手册确实比较详细但繁琐&#xff0c;如何快速知晓该部分信息&#xff0c;涛tao道长给你们说&#xff0c;简单得很&#xff0c;一般新入门的道友有所不知&#xff0c;往往后面…

告别手动操作!用Ansible user模块高效管理 Linux账户

在企业运维环境中&#xff0c;服务器的用户管理是一项基础但非常重要的任务。比如&#xff0c;当有新员工加入时&#xff0c;我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时&#xff0c;我们也需要迅速禁用或删除他们的账户&#xff0c;…

ADC模数转换器概念函数及应用

ADC模数转换器概念函数及应用 文章目录 ADC模数转换器概念函数及应用1.ADC简介2.逐次逼近型ADC2.1逐次逼近型ADC2.2stm32逐次逼近型2.3ADC基本结构2.4十六个通道 3.规则组的4种转换模式3.1单次转换&#xff0c;非扫描模式3.2连续转换&#xff0c;非扫描模式3.3单次转换&#xf…

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展&#xff0c;以DeepSeek为代表的大语言模型&#xff08;LLM&#xff09;正在逐步渗透到传统硬件开发领域。在FPGA&#xff08;现场可编程门阵列&#xff09;和IC&#xff08;集成电路&#xff09;开发这一技术密集型行业中&#xff0c;DeepSeek凭借其…

【Elasticsearch】nested聚合

在 Elasticsearch 中&#xff0c;嵌套聚合&#xff08;nestedaggregation&#xff09;的语法形式用于对嵌套字段&#xff08;nestedfields&#xff09;进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型&#xff0c;用于存储数组中的对象&#xff0c;这些对象需要独…

【Uniapp-Vue3】创建DB schema数据表结构

右键uniCloud文件下的database文件&#xff0c;点击“新建DB schema”&#xff0c;选择模板&#xff0c;修改文件名&#xff0c;点击“创建” 创建完成后会出现对应的文件&#xff0c;进入该文件进行配置 对文件中的必填选项&#xff0c;用户权限&#xff0c;字段进行配置 其…

BFS算法篇——广度优先搜索,探索未知的旅程(上)

文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索&#xff08;BFS&#xff09;是一种广泛应用于图论中的算法&#xff0c;常用于寻找最短路径、图的遍历等问题。与深度优先搜索&#xff08;DFS&…

蓝耘智算平台使用DeepSeek教程

目录 一.平台架构与技术特点 二、DeepSeek R1模型介绍与优势 DeepSeek R1 模型简介 DeepSeek R1 模型优势 三.蓝耘智算平台使用DeepSeek教程 展望未来 耘元生代智算云是蓝耘科技推出的一款智算云平台有着以下特点&#xff1a; 一.平台架构与技术特点 基于 Kubernetes 原…