jsoup攜帶cookie(jsoup怎麼用)

本文目錄一覽:

jsoup教程

jsoup是一款Java的HTML解析器,主要用來對HTML解析。 官網 中文文檔

在爬蟲的時候,當我們用HttpClient之類的框架,獲取到網頁源碼之後,需要從網頁源碼中取出我們想要的內容,

就可以使用jsoup這類HTML解析器了。可以非常輕鬆的實現。

雖然jsoup也支持從某個地址直接去爬取網頁源碼,但是只支持HTTP,HTTPS協議,支持不夠豐富。

所以,主要還是用來對HTML進行解析。

◆其中,要被解析的HTML可以是一個HTML的字元串,可以是一個URL,可以是一個文件。

org.jsoup.Jsoup把輸入的HTML轉換成一個org.jsoup.nodes.Document對象,然後從Document對象中取出想要的元素。

org.jsoup.nodes.Document繼承了org.jsoup.nodes.Element,Element又繼承了org.jsoup.nodes.Node類。裡面提供了豐富的方法來獲取HTML的元素。

◇從URL獲取HTML來解析

其中Jsoup.connect(“xxx”)方法返回一個org.jsoup.Connection對象。

在Connection對象中,我們可以執行get或者post來執行請求。但是在執行請求之前,

我們可以使用Connection對象來設置一些請求信息。比如:頭信息,cookie,請求等待時間,代理等等來模擬瀏覽器的行為。

◆獲得Document對象後,接下來就是解析Document對象,並從中獲取我們想要的元素了。

Document中提供了豐富的方法來獲取指定元素。

◇使用DOM的方式來取得

getElementById(String id):通過id來獲取

getElementsByTag(String tagName):通過標籤名字來獲取

getElementsByClass(String className):通過類名來獲取

getElementsByAttribute(String key):通過屬性名字來獲取

getElementsByAttributeValue(String key, String value):通過指定的屬性名字,屬性值來獲取

getAllElements():獲取所有元素

◇通過類似於css或jQuery的選擇器來查找元素

使用的是Element類的下記方法:

public Elements select(String cssQuery)

通過傳入一個類似於CSS或jQuery的選擇器字元串,來查找指定元素。

例子:

選擇器的更多語法(可以在org.jsoup.select.Selector中查看到更多關於選擇器的語法):

tagname: 通過標籤查找元素,比如:a

ns|tag: 通過標籤在命名空間查找元素,比如:可以用 fb|name 語法來查找 fb:name 元素

#id: 通過ID查找元素,比如:#logo

.class: 通過class名稱查找元素,比如:.masthead

[attribute]: 利用屬性查找元素,比如:[href]

[^attr]: 利用屬性名前綴來查找元素,比如:可以用[^data-] 來查找帶有HTML5 Dataset屬性的元素

[attr=value]: 利用屬性值來查找元素,比如:[width=500]

[attr^=value], [attr$=value], [attr=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查找元素,比如:[href=/path/]

[attr~=regex]: 利用屬性值匹配正則表達式來查找元素,比如: img[src~=(?i).(png|jpe?g)]

*: 這個符號將匹配所有元素

Selector選擇器組合使用

el#id: 元素+ID,比如: div#logo

el.class: 元素+class,比如: div.masthead

el[attr]: 元素+class,比如: a[href]

任意組合,比如:a[href].highlight

ancestor child: 查找某個元素下子元素,比如:可以用.body p 查找在”body”元素下的所有 p元素

parent child: 查找某個父元素下的直接子元素,比如:可以用div.content p 查找 p 元素,也可以用body * 查找body標籤下所有直接子元素

siblingA + siblingB: 查找在A元素之前第一個同級元素B,比如:div.head + div

siblingA ~ siblingX: 查找A元素之前的同級X元素,比如:h1 ~ p

el, el, el:多個選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logo

偽選擇器selectors

:lt(n): 查找哪些元素的同級索引值(它的位置在DOM樹中是相對於它的父節點)小於n,比如:td:lt(3) 表示小於三列的元素

:gt(n):查找哪些元素的同級索引值大於n,比如: div p:gt(2)表示哪些div中有包含2個以上的p元素

:eq(n): 查找哪些元素的同級索引值與n相等,比如:form input:eq(1)表示包含一個input標籤的Form元素

:has(seletor): 查找匹配選擇器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素

:not(selector): 查找與選擇器不匹配的元素,比如: div:not(.logo) 表示不包含 class=”logo” 元素的所有 div 列表

:contains(text): 查找包含給定文本的元素,搜索不區分大不寫,比如: p:contains(jsoup)

:containsOwn(text): 查找直接包含給定文本的元素

:matches(regex): 查找哪些元素的文本匹配指定的正則表達式,比如:div:matches((?i)login)

:matchesOwn(regex): 查找自身包含文本匹配指定正則表達式的元素

注意:上述偽選擇器索引是從0開始的,也就是說第一個元素索引值為0,第二個元素index為1等

◆通過上面的選擇器,我們可以取得一個Elements對象,它繼承了ArrayList對象,裡面放的全是Element對象。

接下來我們要做的就是從Element對象中,取出我們真正需要的內容。

通常有下面幾種方法:

◇Element.text()

這個方法用來取得一個元素中的文本。

◇Element.html()或Node.outerHtml()

這個方法用來取得一個元素中的html內容

◇Node.attr(String key)

獲得一個屬性的值,例如取得超鏈接a href=””中href的值

json字元串-數組類型與JSONArray之間的轉換

複雜json格式字元串與JSONObject之間的轉換

Jsoup或者HttpClient抓取web頁面時,data,userAgent,cookie(),timeout(),post();為什麼要設置這些?

userAgent讓伺服器感覺訪問者更像一個真實的瀏覽器在訪問,cookie是看伺服器需不需要,timeout還需要解釋嗎,你不設置有一個默認的超時時間

使用OkHttp進行重定向攔截處理

網上有很多的OkHttp的教程,但是並沒有一個是關於如何OkHttp處理重定向的。這裡的處理重定向的意思是:把重定向請求攔截下來,然後我們自己去請求重定向後的網頁,然後通過Jsoup解析自己需要的網頁數據。比如說我們模擬用戶登錄,然後自己去請求解析登陸後跳轉的網頁的內容。為什麼要做這樣的一個東西呢?比如說課程表的查成績功能,就可以使用這種方法來獲取成績。

大概的原理是怎樣的呢?

我們先來說一下瀏覽器是怎麼樣做用戶登錄的:瀏覽器會將你輸入的帳號和密碼通過POST請求攜帶過去,當然可能還會有其它欄位,因為這個POST請求是我們網頁和伺服器規定好的;登錄成功後,伺服器會返回一個 Set-Cookie 請求頭欄位,有了Cookie瀏覽器就可以通過GET請求訪問登錄後的網頁,注意沒有這個Cookie是無法請求登陸後的網頁的,GET請求必須設置Cookie請求頭欄位,將伺服器返回的Cookie攜帶過去。

明白了瀏覽器的行為之後,我們知道需要做的步驟就是4步:

我們需要通過抓包或者Chorme瀏覽器自帶的請求查看功能來查看POST請求提交的表單是怎樣的。Chorme按F12即可

輸入帳號密碼點擊登錄即可

點擊登陸後我們可以看到,控制面板出現了一堆訪問的記錄,第一個就是我們要找的,第一個的Status標誌是302,302是重定向的意思。我們點擊(pass.asp)這個請求,然後查看它的POST的請求頭(點擊Headers)。

我們看到了一堆的Set-Cookie欄位,欄位對應的內容就是我們要攜帶做GET請求的

同時我們可以看到POST提交的表單內容,有些網站的提交參數是經過加密的,如果要做通用的,我們需要找到它加密的方法,做同樣的加密處理。

接下來使用OkHttp進行操作

由於OkHttp提供了自動攜帶Cookie進行請求的功能,於是我們可以很方便地進行處理了。

為什麼設置CookieJar就能自動攜帶Cookie了呢?給你看一段OkHttp的源碼就知道了。

於是接下來我們就是做POST請求了

拿到內容後就可以自己進行內容的解析和展示了。

java的Jsoup登錄有驗證碼網頁獲取登錄後的cookie

首先是jar倉庫:

dependency

groupIdorg.seleniumhq.selenium/groupId

artifactIdselenium-java/artifactId

version[3.0.1,)/version//獲取最新的版本庫

/dependency

dependency

groupIdorg.jsoup/groupId

artifactIdjsoup/artifactId

version1.8.2/version

typejar/type

/dependency

代碼:

public static void getIndex2() {

//之前運行程序發現生成了N多個chrome driver進程,搞不懂為什麼會有那麼多進程產生,網上查了下,說起這個service有用,拿來試下,效果未知

ChromeDriverService service = new

ChromeDriverService.Builder().usingDriverExecutable(new

File(“./driver/chromedriver.exe”)).usingAnyFreePort().build();

try {

service.start();

} catch (IOException ex) {

Logger.getLogger(kechengbiaoIndex.class.getName()).log(Level.SEVERE, null, ex);

}

//end

//正式開始

//先定義瀏覽器驅動,我用chrome瀏覽器,網上下載一個chromedriver.exe,啟動時需要載入

System.getProperties().setProperty(“webdriver.chrome.driver”, “./driver/chromedriver.exe”);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190421.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 22:33
下一篇 2024-11-29 22:33

相關推薦

  • Python載入Cookie錯誤解決方法用法介紹

    本文將從多個方面詳細闡述Python載入Cookie錯誤的解決方法,希望能對讀者有所幫助。 一、Cookie錯誤常見原因 1、Cookie過期:當Cookie過期時,載入Cooki…

    編程 2025-04-29
  • Cookie是後端生成的嗎?

    是的,Cookie通常是由後端生成並發送給客戶端的。下面從多個方面詳細闡述這個問題。 一、什麼是Cookie? 我們先來簡單地了解一下什麼是Cookie。Cookie是一種保存在客…

    編程 2025-04-28
  • Cookie設置詳解

    在Web應用中,Cookie是一個重要的概念。Cookie可以在客戶端(用戶的瀏覽器)和伺服器之間存儲一些信息,以便於伺服器根據這些信息提供個性化的服務。在這篇文章中,我們將從多個…

    編程 2025-04-24
  • js-cookie設置過期時間

    一、什麼是js-cookie js-cookie是一個簡單、輕量級的JavaScript庫,用於處理瀏覽器cookie。該庫提供了一組簡單易用的API,用於設置、讀取和刪除cook…

    編程 2025-04-22
  • Express Cookie詳解

    一、什麼是Express Cookie Express Cookie是基於Node.js平台的Express框架提供的一個Cookie組件,用於在客戶端和服務端之間傳遞數據。它可以…

    編程 2025-02-05
  • 跨域攜帶cookie的實現

    跨域攜帶cookie是一種常見的情況,本文將詳細闡述使用多種方法實現跨域攜帶cookie。首先我們需要了解什麼是跨域,什麼是cookie。 一、什麼是跨域? 跨域表示在同源策略限制…

    編程 2025-01-27
  • 詳解Cookie過期時間設置

    一、設置過期時間的作用 在使用Web應用程序時,經常需要存儲一些用戶數據或應用程序數據,如用戶名、購物車信息、用戶個人配置等。而Cookie是存儲這些數據的一種常用方式。Cooki…

    編程 2025-01-24
  • js設置cookie為空,js怎麼設置cookie

    本文目錄一覽: 1、js 怎麼重新設置cookie 2、關於js設置cookie問題 ie cookie ie11查看cookie ie的cookie在哪 3、Js操作cookie…

    編程 2025-01-14
  • cookiejs本地網頁,js獲取頁面cookie

    本文目錄一覽: 1、為什麼本地使用js或jquery操作cookie在谷歌瀏覽器chrome中不生效 2、用原js寫獲取本地cookie的方法 3、請問如何打開一個網頁的時候用js…

    編程 2025-01-14
  • 了解cookie安全性

    一、能夠控制cookie的安全性 可以通過設置cookie的httponly和secure屬性來控制cookie的安全性。 httponly屬性可以防止cookie被JavaScr…

    編程 2025-01-14

發表回復

登錄後才能評論