日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Jsoup爬虫入门

發(fā)布時間:2023/12/10 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Jsoup爬虫入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、了解Jsoup

Jsoup是一款Java的HTML解析器,主要用來對HTML解析。

二、JSoup的Mavven依賴

<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.1</version> </dependency>

三、Jsoup框架中的常用方法

connet (String url): 創(chuàng)建一個新的Connection連接對象。

get(): 取得要解析的一個HTML文件,如果從該URL獲取HTML時發(fā)生錯誤,則會拋出IOException異常。

parse(String html,String vaseUri): 將輸入的HTML解析為一個新的文檔(Document),參數(shù)baseUri用來相對一個URL轉(zhuǎn)成絕對URL.并指定從哪個網(wǎng)站獲取文檔.只要解析的不是空字符串,就能返回一個結(jié)構(gòu)合理的文檔,其中包含(至少)一個head和一個body的元素。

parseBodyFragment(): 創(chuàng)建一個空殼的文檔,并插入解析過得HTML到Body元素中,如果使用正常的Jsoup.parse(String html)方法,通常也可以得到相同的結(jié)果。

Document.body(): 能夠取得文檔body元素的所有子元素,具體功能與doc.getElementsByTag("body")相同。

Node.atter(String key): 獲取一個屬性的值。

Element.text(): 獲取一個元素中的文本。

Element.html()或Node.outerHtml(): 獲取元素或?qū)傩灾械腍TML內(nèi)容。

四、JSoup 解析 HTML 字符串

說明:通過調(diào)用fetchHtmlSync("需要爬取的網(wǎng)址")得到HTML字符串str,再調(diào)用Jsoup.parse(str)將輸入的HTML解析為一個新的文檔(Document)。

/*** okhttp客戶端* OkHttpClient是一個高效的HTTP客戶端,其特性包含:* 支持HTTP/2,允許所有同一個主機地址的請求共享同一個socket連接池減少請求延時* 透明的GZIP壓縮減少響應數(shù)據(jù)的大小* 緩存響應內(nèi)容,避免一些完全重復的請求*/private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()//設(shè)置連接超時時間為30秒.connectTimeout(30, TimeUnit.SECONDS)//自定義線程池任務調(diào)度策略 dispatcher(線程調(diào)度策略).dispatcher(new Dispatcher(new ThreadPoolExecutor(1, 1, 2, TimeUnit.MINUTES, new LinkedBlockingQueue<>(6000), r -> new Thread("spider task"))))//設(shè)置代理 沒有使用代理ip進行抓取.connectionPool(new ConnectionPool(2, 1, TimeUnit.MINUTES)).build();/*** 同步獲取網(wǎng)頁數(shù)據(jù)** @param url 網(wǎng)站地址* @return 網(wǎng)頁內(nèi)容* @throws IOException*/public static String fetchHtmlSync(String url) throws IOException {try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}Request request = new Request.Builder().url(url).addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36").addHeader("Referer", "http://……").build();return Objects.requireNonNull(OK_HTTP_CLIENT.newCall(request).execute().body()).string();//Request request = new Request.Builder().url(要獲取的網(wǎng)頁).build();//String s =OK_HTTP_CLIENT.newCall(request).execute().body().string();//s即為網(wǎng)頁源碼的字符串//Objects.requireNonNull() 用于在方法中進行參數(shù)驗證。遇到要判斷對象是否為空,空的時候報空指針異常}

五、Jsoup獲取信息

使用標準的DOM方法:

根據(jù)id查找元素: getElementById(String id)
根據(jù)標簽查找元素: getElementsByTag(String tag)
根據(jù)class查找元素: getElementsByClass(String className)
根據(jù)屬性查找元素: getElementsByAttribute(String key)
兄弟遍歷方法: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()
層級之間遍歷: parent(), children(), child(int index)

這些方法會返回Element或者Elements節(jié)點對象,這些對象可以使用下面的方法獲取一些屬性:

attr(String key): 獲取某個屬性值
attributes(): 獲取節(jié)點的所有屬性
id(): 獲取節(jié)點的id
className(): 獲取當前節(jié)點的class名稱
classNames(): 獲取當前節(jié)點的所有class名稱
text(): 獲取當前節(jié)點的textNode內(nèi)容
html(): 獲取當前節(jié)點的 inner HTML
outerHtml(): 獲取當前節(jié)點的 outer HTML
data(): 獲取當前節(jié)點的內(nèi)容,用于script或者style標簽等
tag(): 獲取標簽
tagName(): 獲取當前節(jié)點的標簽名稱

例子: 獲取id="docContent"標簽下所有a標簽中href = ""的內(nèi)容

Document document=Jsoup.parse("爬取網(wǎng)站"); Elements elements=document.getElementById("docContent").select("a"); for (Element element : elements) {String myUrl=element.attr("href"); }

總結(jié)

以上是生活随笔為你收集整理的Java Jsoup爬虫入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。