開源Html分析器解析庫對比
幾乎所有已知的HTML解析器都是實現W3C DOM API(JAXP的API一部分,用於XML處理),並給你一個org.w3c.dom.Document,便於透過JAXP API直接使用。主要的區別通常是是否能分析有問題的html。大多數解析器是在一定程度上都寬容非結構非完整的HTML,如JTidy,NekoHTML,TagSoup和HtmlCleaner。您通常可以使用這種型別的HTML解析器對付比較“整潔”的HTML源,這樣就可以使用W3C DOM和 JAXP API.
NekoHTML:
TagSoup:
jTidy:
HtmlCleaner:
用以上程式碼做測試抓取文件html中連結標籤,贏家是HtmlCleaner,它快速和容易實現。一個缺點HtmlCleaner是,它不提供一個Maven倉庫。
HtmlUnit
HtmlUnit使您能夠像一個在WebBrowser裡面程式設計。輸入表單的值,單擊按鈕,呼叫JavaScript等等。它不只是一個HTML解析器。是一個真正的“圖形介面的web瀏覽器”和HTML的單元測試工具。
Jsoup:
提供一個完全自己的API。它給你像使用jQuery般的CSS選擇器,並提供了一個靈活的API來遍歷HTML DOM樹來獲得感興趣的內容。
HTML DOM樹的遍歷是Jsoup的主要特徵。有過org.w3c.dom.Document打交道的人知道這是多麼痛苦的地獄,可以使用jsoup詳細的NodeList和節點API來遍歷DOM。當然,XPath的使生活更輕鬆,但是它難以學習。
如果你想從通常的現實世界HTML中提取特定資料,Jsoup是選擇。
詳細見:http://jsoup.org/cookbook/extracting-data/attributes-text-html
NekoHTML:
final DOMParser parser = new DOMParser(); try { parser.parse(new InputSource(urlIS)); document = parser.getDocument(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } <p class="indent"> |
TagSoup:
final Parser parser = new Parser(); SAX2DOM sax2dom = null; try { sax2dom = new SAX2DOM(); parser.setContentHandler(sax2dom); parser.setFeature(Parser.namespacesFeature, false); parser.parse(new InputSource(urlIS)); } catch (Exception e) { e.printStackTrace(); } document = sax2dom.getDOM(); <p class="indent"> |
jTidy:
final Tidy tidy = new Tidy(); tidy.setQuiet(true); tidy.setShowWarnings(false); tidy.setForceOutput(true); document = tidy.parseDOM(urlIS, null); <p class="indent"> |
HtmlCleaner:
final HtmlCleaner cleaner = new HtmlCleaner(urlIS); try { cleaner.clean(); document = cleaner.createDOM(); } catch (Exception e) { e.printStackTrace(); } <p class="indent"> |
用以上程式碼做測試抓取文件html中連結標籤,贏家是HtmlCleaner,它快速和容易實現。一個缺點HtmlCleaner是,它不提供一個Maven倉庫。
HtmlUnit
HtmlUnit使您能夠像一個在WebBrowser裡面程式設計。輸入表單的值,單擊按鈕,呼叫JavaScript等等。它不只是一個HTML解析器。是一個真正的“圖形介面的web瀏覽器”和HTML的單元測試工具。
Jsoup:
提供一個完全自己的API。它給你像使用jQuery般的CSS選擇器,並提供了一個靈活的API來遍歷HTML DOM樹來獲得感興趣的內容。
HTML DOM樹的遍歷是Jsoup的主要特徵。有過org.w3c.dom.Document打交道的人知道這是多麼痛苦的地獄,可以使用jsoup詳細的NodeList和節點API來遍歷DOM。當然,XPath的使生活更輕鬆,但是它難以學習。
如果你想從通常的現實世界HTML中提取特定資料,Jsoup是選擇。
String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; Document doc = Jsoup.parse(html); Element link = doc.select("a").first(); String text = doc.body().text(); // "An example link" String linkHref = link.attr("href"); // "http://example.com/" String linkText = link.text(); // "example"" String linkOuterH = link.outerHtml(); // "<a href="http://example.com"><b>example</b></a>" String linkInnerH = link.html(); // "<b>example</b>" <p class="indent"> |
詳細見:http://jsoup.org/cookbook/extracting-data/attributes-text-html
相關文章
- 開源OCR模型對比模型
- 主流開源協議對比協議
- 三款開源關係型資料庫對比:MySQL、PostgreSQL、SQLiteXP資料庫MySqlSQLite
- OkHttp 開源庫使用與原始碼解析HTTP原始碼
- 【移動開發】Checkout開源庫原始碼解析移動開發原始碼
- Everything is Serverless,從開源框架對比說起Server框架
- 記憶體資料庫解析與主流產品對比(二)記憶體資料庫
- 記憶體資料庫解析與主流產品對比(一)記憶體資料庫
- 記憶體資料庫解析與主流產品對比(三)記憶體資料庫
- 幾種開源富文字編輯器對比
- 開源雲原生平臺對比 KubeSphere vs RainbondAI
- 開源向量資料庫比較:Chroma, Milvus, Faiss,Weaviate資料庫AI
- 去O路上的歷程--開源分散式資料庫產品對比(TBase VS AntDB)分散式資料庫
- 推薦一個markdown格式轉html格式的開源JavaScript庫HTMLJavaScript
- JAVA集合:ConcurrentHashMap深度解析(版本對比)JavaHashMap
- 對比學習 ——simsiam 程式碼解析。
- 開源驅動的飛躍:Fedora 19、20效能對比
- 文字識別OCR開源框架的對比--Tesseract vs EasyOCR框架
- 大咖說·對話開源|企業如何用好開源資料庫資料庫
- 一起玩轉開源資料庫!OceanBase DevCon 之開源生態全景解析資料庫dev
- 【為生活開發系列之五】開源Android福彩號碼對比助手Android
- 《安富萊嵌入式週報》第346期:開源2GHz頻寬,12bit解析度,3.2Gsps取樣率示波,開源韌體安全分析器, 開源口袋電源,開源健康測量,FreeCAD
- 常見開源分散式檔案系統架構對比分散式架構
- 解析-HTML 解析器HTML
- 爬蟲入門系列(四):HTML 文字解析庫 BeautifulSoup爬蟲HTML
- 我們對“開源”的力量一無所知,卻又無比期待。
- JockeyJS——優秀的WebView與JS互動開源庫使用和解析JSWebView
- GitHub趨勢榜第二名:解析、對比不同程式語言的Semantic庫Github
- 精準測試與開源工具Jacoco的覆蓋率能力對比開源工具
- Google官方Fragment頁面框架Navigation和XPage開源框架的使用對比GoFragment框架Navigation
- redux, koa, express 中介軟體實現對比解析ReduxExpress
- Html 解析利器-goqueryHTMLGo
- oracle Mysql PostgreSQL 資料庫的對比OracleMySql資料庫
- GitHub 倉庫對比工具 —— github-compareGithub
- Swift開源庫MoyaSwift
- rust常用開源庫Rust
- 使用cJSON庫對JSON格式進行解析JSON
- 華為雲和開源Istio運維管理對比樣例應用部署運維
- 手把手教你寫網路爬蟲(3):開源爬蟲框架對比爬蟲框架