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.pswp.cn/news/894944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894944.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【系統架構設計師】分布式數據庫透明性

目錄 1. 說明2. 分片透明3. 復制透明4. 位置透明5. 邏輯透明&#xff08;局部數據模型透明&#xff09;6.例題6.1 例題1 1. 說明 1.在分布式數據庫系統中&#xff0c;分片透明、復制透明、位置透明和邏輯透明是幾個重要的基本概念。2.分片透明、復制透明、位置透明和邏輯透明是…

音頻進階學習十一——離散傅里葉級數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;用…

2021 年 9 月青少年軟編等考 C 語言五級真題解析

目錄 T1. 問題求解思路分析T2. 抓牛思路分析T3. 交易市場思路分析T4. 泳池思路分析T1. 問題求解 給定一個正整數 N N N,求最小的 M M M 滿足比 N N N 大且 M M M 與 N N N 的二進制表示中有相同數目的 1 1 1。 舉個例子,假如給定 N N N 為 78 78 78,二進制表示為 …

Windows 中學習Docker環境準備2、Docker Desktop中安裝ubuntu

Windows 中學習Docker環境準備1、Win11安裝Docker Desktop Windows 中學習Docker環境準備2、Docker Desktop中安裝ubuntu Windows 中學習Docker環境準備3、在Ubuntu中安裝Docker 需要更多Docker學習視頻和資料&#xff0c;請文末聯系 一、安裝 Docker Desktop 下載 Docker…

LabVIEW2025中文版軟件安裝包、工具包、安裝教程下載

下載鏈接&#xff1a;LabVIEW及工具包大全-三易電子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安裝圖文教程》 1、解壓后&#xff0c;雙擊install.exe安裝 2、選中“我接受上述2條許可協議”&#xff0c;點擊下一步 3、點擊下一步&#xff0c;安裝NI Packa…

PHP ODBC:深入探索數據庫連接與交互技術

PHP ODBC:深入探索數據庫連接與交互技術 引言 PHP作為一種廣泛使用的服務器端腳本語言,在Web開發中扮演著重要角色。在數據處理方面,PHP與數據庫的交互是其核心功能之一。ODBC(Open Database Connectivity)作為一種標準數據庫訪問接口,允許PHP應用程序與各種數據庫系統…

AUTOSAR汽車電子嵌入式編程精講300篇-基于FPGA的CAN FD汽車總線數據交互系統設計

目錄 前言 汽車總線以及發展趨勢 汽車總線技術 汽車總線發展趨勢 CAN FD總線國內外研究現狀 2 系統方案及CAN FD協議分析 2.1系統控制方案設計 2.2 CAN FD總線幀結構分析 2.2.1數據幀分析 2.2.2遠程幀分析 2.2.3過載幀分析 2.2.4錯誤幀分析 2.2.5幀間隔分析 2.3位…

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…

5. k8s二進制集群之ETCD集群部署

下載etcd安裝包創建etcd配置文件準備證書文件和etcd存儲目錄ETCD證書文件安裝(分別對應指定節點)創建證書服務的配置文件啟動etcd集群驗證etcd集群狀態繼續上一篇文章《k8s二進制集群之ETCD集群證書生成》下面介紹一下etcd證書生成配置。 下載etcd安裝包 https://github.com…

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;必須要先有一個…

YOLOv11-ultralytics-8.3.67部分代碼閱讀筆記-autobatch.py

autobatch.py ultralytics\utils\autobatch.py 目錄 autobatch.py 1.所需的庫和模塊 2.def check_train_batch_size(model, imgsz640, ampTrue, batch-1, max_num_obj1): 3.def autobatch(model, imgsz640, fraction0.60, batch_sizeDEFAULT_CFG.batch, max_num_obj1): …

【文件上傳、秒傳、分片上傳、斷點續傳、重傳】

文章目錄 獲取文件對象文件上傳&#xff08;秒傳、分片上傳、斷點續傳、重傳&#xff09;優化 獲取文件對象 input標簽的onchange方法接收到的參數就是用戶上傳的所有文件 <html lang"en"><head><title>文件上傳</title><style>#inp…

Office/WPS接入DS等多個AI工具,開啟辦公新模式!

在現代職場中&#xff0c;Office辦公套件已成為工作和學習的必備工具&#xff0c;其功能強大但復雜&#xff0c;熟練掌握需要系統的學習。為了簡化操作&#xff0c;使每個人都能輕松使用各種功能&#xff0c;市場上涌現出各類辦公插件。這些插件不僅提升了用戶體驗&#xff0c;…