StarSpider 星蛛 爬蟲 Java框架
開源技術欄
StarSpider 能夠實現 針對 HTML XSS SQL 數學表達式等雜亂數據的 爬取 解析 提取 需求!
目錄
文章目錄
- StarSpider 星蛛 爬蟲 Java框架
- 目錄
- 介紹
- 如何獲取?
- maven配置
- 架構是什么樣的?
- 結果對象的類型與作用
- 解析組件的類型與作用
- 有哪些功能?
- 簡單入門
- 標簽文本的解析
- HTML或XML屬性的查找
- 數學表達式的提取
- 正則表達式的匹配
- Json字符串的解析
- sql 語句的解析
- 更新日志
- 1.1 版本更新于 2025-01-26
- 更多信息
介紹
星蛛解析庫是一款針對數據解析提供的庫,其中內置諸多數據解析組件,支持對網絡數據包,文件對象,以及字符串對象進行解析,是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.LABELDocument | io.github.beardedManZhao.starSpider.parser.LABELParser | 面向標簽節點進行數據提取操作 | v1.0 |
io.github.beardedManZhao.starSpider.container.HTMLDocument | io.github.beardedManZhao.starSpider.parser.HTMLParser | 面向標簽節點與節點屬性進行數據提取操作,是LABEL結果對象的子類實現 | v1.0 |
io.github.beardedManZhao.starSpider.container.ExpressionData | io.github.beardedManZhao.starSpider.parser.MEParser | 面向每一個數學表達式進行數據提取操作 | v1.0 |
io.github.beardedManZhao.starSpider.container.StringData | io.github.beardedManZhao.starSpider.parser.PatternParser | 面向每一個符合提取條件的字符串 | v1.0 |
io.github.beardedManZhao.starSpider.container.SQLStringData | io.github.beardedManZhao.starSpider.parser.SQLStringParser | 面向每一個SQL語句進行語義解析操作 | v1.0 |
io.github.beardedManZhao.starSpider.container.FastJsonDocument | io.github.beardedManZhao.starSpider.parser.FastJsonParser | 面向json字符串中每一個json節點進行提取操作。 | v1.0 |
解析組件的類型與作用
組件名稱(常量區中的常量名) | 組件類型 | 作者主頁 | 面向格式 | 已注冊至門戶 | 組件作用 | 組件支持版本 |
---|---|---|---|---|---|---|
NULL | io.github.beardedManZhao.parser.starSpider.StarSpider | https://github.com/BeardedManZhao | URL, FILE, String | NO | 與用戶進行直接交互,根據用戶的需求調整框架內部的結構并提交解析數據的任務 | v1.0 |
PARSER_NAME_LABEL | io.github.beardedManZhao.parser.starSpider.LABELParser | https://github.com/BeardedManZhao | 使用標簽格式的字符串 | YES | 提取與解析標簽數據中的每一個節點 | v1.0 |
PARSER_NAME_HTML | io.github.beardedManZhao.parser.starSpider.HTMLParser | https://github.com/BeardedManZhao | HTML XML | YES | 通過節點名稱或節點屬性,提取與解析HTML與XML中的每一個節點,并返回具有相對節點解析功能的結果對象 | v1.0 |
PARSER_NAME_REGEXP | io.github.beardedManZhao.parser.starSpider.PatternParser | https://github.com/BeardedManZhao | String | YES | 通過用戶提供的正則表達式解析任意文本中的內容,提取出符合正則表達式的所有數據 | v1.0 |
PARSER_NAME_ME | io.github.beardedManZhao.parser.starSpider.MEParser | https://github.com/BeardedManZhao | String | YES | 智能提取出所有數學表達式,并通過ME框架進行表達式計算,返回結果 | v1.0 |
PARSER_NAME_SQL_STRING_INFO | io.github.beardedManZhao.parser.starSpider.SQLStringParser | https://github.com/BeardedManZhao/SQLStringInFo | SQLString | YES | 智能提取出所有的SQL語句,并通過SQLStringINFO解析庫對語句進行解析,然后返回結果 | v1.0 |
PARSER_NAME_FASTJSON | io.github.beardedManZhao.parser.starSpider.FastJsonParser | https://github.com/alibaba | Json | YES | 針對JSON進行解析的庫,將FastJson接入到門戶,它返回的結果就是一個JSONObject對象 | v1.0 |
… | … | Dear friends | … | NO | 事實上,我們希望有更多人可以將自己的實現提供給我們,由各位親自將自己的組件接入至星蛛門戶 | … |
有哪些功能?
在星蛛門戶中,用戶可以直接通過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