jsoup設置cookie,jsoup修改html內容

本文目錄一覽:

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”);

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

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

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抓取dopostback的網頁錯誤 是不是BODY出什麼問題

在Java 程序在解析HTML 文檔時,大家應該曉得htmlparser 這個開源項目,我也是使用過,不過這個程序到了2006年就沒有更新了。由於我的基礎較差,對於擴展自定義的標籤還是不太懂,還是有超時問題困擾,去在約上找個專家諮詢了下,使用起來還是很容易上手的。下面寫些使用心得:

jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jQuery-like methods.

jsuop是一款java的html解析器,提供一套非常省力的API,通過dom模型css和類似於jquery的方式來獲取和操作數據。

功能:1.解析一個Html文檔,2.解析一個body片段

Java代碼

String html = “htmlheadtitleFirst parse/title/head”

+ “bodypParsed HTML into a doc./p/body/html”;

Document doc = Jsoup.parse(html);//分析文檔,使用doc.toString()可以轉為文本

Element body=doc.body();//獲取body片段,使用body.toString()可以轉為文本

獲取方式:1.從本地文件加載 2.根據url地址獲取

Java代碼

/**使用靜態 Jsoup.parse(File in, String charsetName, String baseUri) 方法

*其中baseUri參數用於解決文件中URLs是相對路徑的問題。

*如果不需要可以傳入一個空的字符串。

*/

File input = new File(“/tmp/input.html”);

Document doc = Jsoup.parse(input, “UTF-8”, “”);

Java代碼

/**

*根據url直接獲取內容,可以加入超時,get方法不行,就用post方法

*我在實際應用中,出現404,405,504等錯誤信息

*將get改為post就可以,或者反過來改

*如果等以後弄明白了,再來解釋清楚

*/

Document doc1 = Jsoup.connect(“”).get();

String title = doc1.title(); //獲取網頁的標題

String content=doc1.toString();//將網頁轉為文本

Document doc2 = Jsoup.connect(“”)

.data(“query”, “Java”)//請求參數

.userAgent(“Mozilla”)//設置urer-agent

.cookie(“auth”, “token”)//設置cookie

.timeout(50000)//設置連接超時

.post();//或者改為get

經過我的測試使用,jsoup分析網頁結構和內容的功能遠遠強大於HtmlParser,無論是獲取整個頁面的文本,還是分析特定內容的網頁結構,都是十分的方便。

附上鏈接:jsoup官網: ,中文jsoup:

下面寫些我的使用記錄,希望大家如果能從我的方法中得到啟發,鑒於本人從事開發工作不久,內容可能寫的不是很好。

jsoup數據獲取有兩大方法:1.通過分析dom模型的網頁標籤和元素,2.select元素選擇器,類似jquery方式(功能很強大,還支持正則表達式)。網頁tag標籤有body,div,table,tr,td,a,等等。元素的屬性有,href,title,width,height,color等等,元素屬性的值就是,例如:href=“”, 值就是 。width=“98%” 值就是98%

下面就以分析首頁的每日資訊為例,抓取每日資訊的標題和url地址,詳細寫出分析步驟:

1.用chrome瀏覽器的元素審查,分析頁面的結構,得到每日資訊是div class=main_left層裡面

2.寫程序分析,首先根據url獲取div文本,再來根據文本對內容進行分析

Java代碼

3. 根據整個每日資訊所在的div層,獲取那段內容(精確獲取)

Java代碼

4.根據獲取的目標層得到你所要的內容(title,url地址…等等)

Java代碼

5.加入main方法裡面執行測試

Java代碼

6.附上結束語:jsoup功能很好很強大,附上的只是簡單的使用方法,還有很多需要完善的內容,我其實使用也不到幾天的時間。還有就是select功能還是很好用的,具體參考官方文檔,寫的非常的通俗易懂

感興趣的也可以試試htmlcleaner+xpath的組合

/**

* @method 測試獲取內容程序

*/

public static void main(String[] args) throws IOException {

/**

* 執行分析程序

*/

String url=””;

String HtmlContent=getContentByJsoup(url);

String divContent=getDivContentByJsoup(HtmlContent);

getLinksByJsoup(divContent);

}

/**

* 使用jsoup分析divContent

* 1.獲取鏈接 2.獲取url地址(絕對路徑)

*/

public static void getLinksByJsoup(String divContent){

String abs=””;

Document doc=Jsoup.parse(divContent,abs);

Elements linkStrs=doc.getElementsByTag(“li”);

System.out.println(“鏈接===”+linkStrs.size());

for(Element linkStr:linkStrs){

String url=linkStr.getElementsByTag(“a”).attr(“abs:href”);

String title=linkStr.getElementsByTag(“a”).text();

System.out.println(“標題:”+title+” url:”+url);

}

}

/**

* 使用jsoup來對文檔分析

* 獲取目標內容所在的目標層

* 這個目標層可以是div,table,tr等等

*/

public static String getDivContentByJsoup(String content){

String divContent=””;

Document doc=Jsoup.parse(content);

Elements divs=doc.getElementsByClass(“main_left”);

divContent=divs.toString();

//System.out.println(“div===”+divContent);

return divContent;

}

/**

* 根據jsoup方法獲取htmlContent

* 加入簡單的時間記錄

* @throws IOException

*/

public static String getContentByJsoup(String url){

String content=””;

try {

System.out.println(“time=====start”);

Date startdate=new Date();

Document doc=Jsoup.connect(url)

.data(“jquery”, “java”)

.userAgent(“Mozilla”)

.cookie(“auth”, “token”)

.timeout(50000)

.get();

Date enddate=new Date();

Long time=enddate.getTime()-startdate.getTime();

System.out.println(“使用Jsoup耗時==”+time);

System.out.println(“time=====end”);

content=doc.toString();//獲取iteye網站的源碼html內容

System.out.println(doc.title());//獲取iteye網站的標題

} catch (IOException e) {

e.printStackTrace();

}

System.out.println(content);

return content;

}

Jsoup 請求鏈接含中文亂碼

這不是亂碼吧 這是經過urlencode過後的編碼。你網上自己找個url編碼 輸個中文字符然後編碼下。

Jsoup 抓取網頁,字符是亂碼,怎麼轉換?跪求拜託了各位 謝謝

1.從url加載一個頁面:Document doc = Jsoup.connect(” ” ).get();2.從url加載頁面同時加載該頁面上的鏈接頁面:Document doc=Jsoup.connect(url).data(“query”, “Java”)// 請求參數.userAgent(“my jsoup”)// 設置 User-Agent.cookie(“auth”, “token”)// 設置 cookie.timeout(3000)// 設置連接超時時間.get();3.本地一個html文件:File input = new File(“/tmp/input.html”);Document doc = Jsoup.parse(input, “UTF-8″, ” ” ); 查看原帖

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

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

相關推薦

  • Python渲染HTML庫

    Python渲染HTML庫指的是能夠將Python中的數據自動轉換為HTML格式的Python庫。HTML(超文本標記語言)是用於創建網頁的標準標記語言。渲染HTML庫使得我們可以…

    編程 2025-04-29
  • Python七年級內容用法介紹

    本文將從多個方面對Python七年級內容進行詳細闡述。 一、安裝Python 要使用Python進行編程,首先需要在計算機上安裝Python。Python可以在官網上免費下載。下載…

    編程 2025-04-29
  • Python載入Cookie錯誤解決方法用法介紹

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

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

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

    編程 2025-04-28
  • Python獲取Flutter上內容的方法及操作

    本文將從以下幾個方面介紹Python如何獲取Flutter上的內容: 一、獲取Flutter應用數據 使用Flutter提供的Platform Channel API可以很容易地獲…

    編程 2025-04-28
  • Python少兒編程的學習內容

    Python被譽為是最適合新手入門的編程語言之一,它簡潔易懂,同時涵蓋了廣泛的編程知識。Python的少兒編程課程也因其易學性和實用性越來越受到家長和孩子們的歡迎。接下來我們將從多…

    編程 2025-04-28
  • Python編程實戰:用Python做網頁與HTML

    Python語言是一種被廣泛應用的高級編程語言,也是一種非常適合於開發網頁和處理HTML的語言。在本文中,我們將從多個方面介紹如何用Python來編寫網頁和處理HTML。 一、Py…

    編程 2025-04-28
  • HTML sprite技術

    本文將從多個方面闡述HTML sprite技術,包含基本概念、使用示例、實現原理等。 一、基本概念 1、什麼是HTML sprite? HTML sprite,也稱CSS spri…

    編程 2025-04-28
  • 使用Python轉髮網頁內容

    Python是一種廣泛使用的編程語言,它在網絡爬蟲、數據分析、人工智能等領域都有廣泛的應用。其中,使用Python轉髮網頁內容也是一個常見的應用場景。在本文中,我們將從多個方面詳細…

    編程 2025-04-27
  • Python中提取指定字符後面的內容

    Python是一種強類型動態語言,它被廣泛應用於數據科學、人工智能、自動化測試、Web開發等領域。在Python中提取指定字符後面的內容是一個常見的需求。 一、split方法 Py…

    編程 2025-04-27

發表回復

登錄後才能評論