要實(shí)現(xiàn)簡(jiǎn)單的java爬蟲推薦使用JSoup解析html,具體步驟如下:1. 添加jsoup依賴,maven用戶在pom.xml中加入對(duì)應(yīng)代碼,gradle用戶添加implementation語(yǔ)句,無(wú)構(gòu)建工具則手動(dòng)導(dǎo)入jar包;2. 使用jsoup.connect方法獲取網(wǎng)頁(yè)內(nèi)容,并通過(guò)useragent和timeout設(shè)置請(qǐng)求頭與超時(shí)時(shí)間,將結(jié)果解析為document對(duì)象;3. 利用類似css選擇器的方式提取數(shù)據(jù),例如遍歷所有鏈接或指定類名的元素內(nèi)容;4. 注意jsoup無(wú)法處理動(dòng)態(tài)加載內(nèi)容,若需應(yīng)對(duì)Javascript渲染頁(yè)面,應(yīng)配合selenium或playwright等工具。整個(gè)流程清晰穩(wěn)定,適用于結(jié)構(gòu)固定的網(wǎng)頁(yè)抓取需求。
要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的java爬蟲,用 Jsoup 解析 HTML 是個(gè)不錯(cuò)的選擇。它簡(jiǎn)單易用,功能又足夠滿足大多數(shù)網(wǎng)頁(yè)抓取和解析的需求。下面我們就一步步來(lái)看怎么用 Java + Jsoup 來(lái)寫一個(gè)基礎(chǔ)但實(shí)用的爬蟲。
1. 添加 Jsoup 依賴
首先你需要在項(xiàng)目中引入 Jsoup 庫(kù)。如果你使用的是 Maven 項(xiàng)目,只需要在 pom.xml 文件里加上這行:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.16.1</version> </dependency>
Gradle 用戶則加這個(gè):
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
implementation 'org.jsoup:jsoup:1.16.1'
如果沒有用構(gòu)建工具,也可以直接下載 jar 包手動(dòng)導(dǎo)入。
2. 獲取網(wǎng)頁(yè)內(nèi)容并解析
Jsoup 提供了很方便的方法來(lái)連接網(wǎng)頁(yè)并獲取 HTML 內(nèi)容。比如這樣:
Document doc = Jsoup.connect("https://example.com").get();
這段代碼會(huì)發(fā)起一個(gè) GET 請(qǐng)求,獲取頁(yè)面內(nèi)容,并自動(dòng)解析成一個(gè) Document 對(duì)象。你可以把它理解為整個(gè) HTML 頁(yè)面的結(jié)構(gòu)化表示。
- 如果目標(biāo)網(wǎng)站需要設(shè)置 User-Agent 或者有反爬機(jī)制,可以加上一些請(qǐng)求頭:
Document doc = Jsoup.connect("https://example.com") .userAgent("Mozilla/5.0") .get();
- 還可以設(shè)置超時(shí)時(shí)間防止卡住:
Document doc = Jsoup.connect("https://example.com") .timeout(10 * 1000) .get();
3. 使用選擇器提取數(shù)據(jù)
Jsoup 支持類似 css 選擇器的方式來(lái)提取元素。這是最常用、也最方便的方式。
舉個(gè)例子,假設(shè)你想提取所有鏈接(a 標(biāo)簽中的 href):
Elements links = doc.select("a"); for (Element link : links) { System.out.println(link.attr("href")); }
再比如,提取某個(gè)類名下的所有標(biāo)題:
Elements titles = doc.select(".article-title"); for (Element title : titles) { System.out.println(title.text()); }
你還可以組合選擇器,比如查找某個(gè) div 下的所有段落:
Elements paras = doc.select("div.content p");
熟悉 CSS 選擇器的話,這部分基本沒有門檻。
4. 處理動(dòng)態(tài)加載的內(nèi)容?
這里要注意一點(diǎn):Jsoup 只能處理靜態(tài) HTML,不能執(zhí)行 JavaScript。也就是說(shuō),如果網(wǎng)頁(yè)內(nèi)容是通過(guò) JS 動(dòng)態(tài)加載的(比如很多現(xiàn)代前端框架做的 SPA),那 Jsoup 抓下來(lái)的就是空白或者不完整的內(nèi)容。
這種情況下,你可以考慮配合 Selenium 或者 Playwright 等工具來(lái)做渲染,然后再用 Jsoup 做解析。不過(guò)這就復(fù)雜多了,屬于進(jìn)階玩法了。
基本上就這些。
整個(gè)流程其實(shí)很清晰:發(fā)請(qǐng)求 → 拿 HTML → 選元素 → 提數(shù)據(jù)。
只要網(wǎng)頁(yè)結(jié)構(gòu)穩(wěn)定,用 Jsoup 就能輕松搞定。