java中幾種解析html的工具
HTML分析是一個比較複雜的工作,Java世界主要有幾款比較方便的分析工具:
1.Jsoup
Jsoup是一個集強大和便利於一體的HTML解析工具。它方便的地方是,可以用於支援用jQuery中css selector的方式選取元素,這對於熟悉js的開發者來說基本沒有學習成本。
String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");
- 1
- 2
- 3
- 1
- 2
- 3
Jsoup還支援白名單過濾機制,對於網站防止XSS攻擊也是很好的。
2.HtmlParser
HtmlParser的功能比較完備,也挺靈活,但談不上方便。這個專案很久沒有維護了,最新版本是2.1。HtmlParser的核心元素是Node,對應一個HTML標籤,支援getChildren()等樹狀遍歷方式。HtmlParser另外一個核心元素是NodeFilter,通過實現NodeFilter介面,可以對頁面元素進行篩選。這裡有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 實現簡易爬蟲。
3.Apache tika
tika是專為抽取而生的工具,還支援PDF、Zip甚至是Java Class。使用tika分析HTML,需要自己定義一個抽取內容的Handler並繼承org.xml.sax.helpers.DefaultHandler,解析方式就是xml標準的方式。crawler4j中就使用了tika作為解析工具。SAX這種流式的解析方式對於分析大檔案很有用,我個人倒是認為對於解析html意義不是很大。
InputStream inputStream = null;
HtmlParser htmlParser = new HtmlParser();
htmlParser.parse(new ByteArrayInputStream(page.getContentData()),
contentHandler, metadata, new ParseContext());
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
4.HtmlCleaner與XPath
HtmlCleaner最大的優點是:支援XPath的方式選取元素。XPath是一門在XML中查詢資訊的語言,也可以用於抽取HTML元素。XPath與CSS Selector大部分功能都是重合的,但是CSS Selector專門針對HTML,寫法更簡潔,而XPath則是通用的標準,可以精確到屬性值。XPath有一定的學習成本,但是對經常需要編寫爬蟲的人來說,這點投入絕對是值得的。
相關推薦
java中幾種解析html的工具
HTML分析是一個比較複雜的工作,Java世界主要有幾款比較方便的分析工具: 1.Jsoup Jsoup是一個集強大和便利於一體的HTML解析工具。它方便的地方是,可以用於支援用jQuery中css selector的方式選取元素,這對於熟悉js的開發者來說基本沒有學
java 中幾種常用數據結構
初學 ble log app 使用 blog list 好的 sort Java中有幾種常用的數據結構,主要分為Collection和map兩個主要接口(接口只提供方法,並不提供實現),而程序中最終使用的數據結構是繼承自這些接口的數據結構類。 一、幾個常用類的區別 1.
Java中幾種常量池的區分
加載完成 表結構 結構 reference 嘗試 int 理解 方法區 spa 轉載自:https://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的內存分配中,經常聽到很多關
JAVA中幾種常用的RPC框架介紹
github 不同的 target int https love num 分布 有一個 RPC是遠程過程調用的簡稱,廣泛應用在大規模分布式應用中,作用是有助於系統的垂直拆分,使系統更易拓展。Java中的RPC框架比較多,各有特色,廣泛使用的有RMI、Hessian、Du
Java 中幾種常用的線程池
需要 表示 ali adf data future rate 並發 ng- Java 中幾種常用的線程池 轉載 : https://www.cnblogs.com/sachen/p/7401959.html 原創 2016年04月14日 23:29:01 標簽: j
Java中幾種常見的NPE問題
avi oar 返回 對象 [] 報錯 不能 alt public 1、Map下的NPE 直接上代碼: public class User { private Integer id; private String name;
Java中幾種代理實現的方式
package javasisst; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; impor
java中幾種Map在什麼情況下使用,並簡單介紹原因及原理
一、Map用於儲存具有對映關係的資料,Map裡儲存著兩組資料:key和value,它們都可以使任何引用型別的資料,但key不能重複。所以通過指定的key就可以取出對應的value。Map介面定義瞭如下常用的方法: 1、void clear():刪除Map中所以鍵值對。 2、b
JAVA中幾種迴圈語句的區別
Java中經常用到for迴圈、while迴圈、do…while迴圈,這裡簡單分析這三中迴圈語句的的使用區別 package sum; /** 拿個求和的例子來體現 求1-100的和 / public class QiuHe { public static
java中幾種常見的排序演算法實現
在Java中得資料結構比較 | 資料機構 | 優點| 缺點 | |陣列 | 插入快,在直到下標得情況下可快速地存取| 查詢慢,刪除慢,大小固定 | |有序陣列 | 比無序得陣列查詢快|刪除和插入慢,大小固定 | |棧 | 提供後進先出方式的存取| 存取其他項很
JAVA中幾種集合(List、Set和Map)的區別
Java中的集合包括三大類,它們是Set、List和Map,它們都處於java.util包中,Set、List和Map都是介面,它們有各自的實現類。Set的實現類主要有HashSet和TreeSet,L
java中幾種常用的資料結構
JAVA中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面值提供方法,並不提供實現),而程式中最終使用的資料結構是繼承自這些介面的資料結構類。 Collcation: Map: 一、幾個常用類的區別 1.ArrayList: 元素單個,
java中幾種比較流行的排序演算法
今天被問到有哪幾種排序演算法,當時我只知道名字,並不知道怎麼實現,所以這裡列出幾種比較常見的排序演算法,便於自己以後可以看看,回憶一下 1、氣泡排序:氣泡排序其實就是在保證每一輪迴圈之後得到的結果就是將前一個數與後一個數進行比較,最後經過第一輪迴圈後最後一個數為該陣列中的最
Java中幾種常見的編碼方式
幾種常見的編碼格式 為什麼要編碼 不知道大家有沒有想過一個問題,那就是為什麼要編碼?我們能不能不編碼?要回答這個問題必須要回到計算機是如何表示我們人類能夠理解的符號的,這些符號也就是我們人類使用的語言。由於人類的語言有太多,因而表示這些語言的符號太多,無法用計算機中一個基本的
Java中幾種常用的分頁
... List<StudentEnroll> students = studentlDao.getAllStudents(); int count = 0; if(studentEnrolls != null && studentEnrolls.s
java 中幾種map的儲存原理和記憶體佔用情況
Map,即對映,也稱為 鍵值對,有一個 Key, 一個 Value 。 比如 Groovy 語言中, def map = ['name' : 'liudehua', 'age' : 50 ] ,則 map[ 'name' ] 的值是 'liudehua'。 那
java 中幾種常用資料結構
Java中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面只提供方法,並不提供實現),而程式中最終使用的資料結構是繼承自這些介面的資料結構類。 一、幾個常用類的區別 1.ArrayList: 元素單個,效率高,多用於查詢 2.Ve
Java中幾種建立檔案的方法比較
在用Java開發的過程中,經常會遇到建立檔案的問題,而File提供了mkdir(),mkdirs(),createNewFile()等方法,那麼怎麼準確快速的使用呢,最好的辦法就是看PAI。這裡我把自己理解的記錄下來: 1.mkdir()建立資料夾,但是建
java中幾種設計模式(單例模式,介面卡模式,簡單工廠模式)
1、單例模式:也分餓漢式單例模式(建立物件)與懶漢式單例模式(未建立物件)程式碼實現:餓漢式單例模式:懶漢式單例模式:2、介面卡模式:介面:實現介面的類:實現介面某個方法的類:3、簡單工廠模式:介面:類1:類2:工廠類:測試類:
java 中幾種常用資料結構 collection與map
JAVA中常用的資料結構(java.util. 中) Java中有幾種常用的資料結構,主要分為Collection和map兩個主要介面(介面只提供方法,並不提供實現),而程式中最終使用的資料結構是繼承自這些介面的資料結構類。其主要的關係(繼承關係)有: (----詳