jsoup獲取headercookie,jsoup獲取標籤內容

本文目錄一覽:

求真正有效的可以模擬登錄新浪微博的java代碼,後續可以用Jsoup進行抓取。急急!!登錄成功馬上給分!

package jsoupTest;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.jsoup.Connection.Method;

import org.jsoup.Connection.Response;

import org.jsoup.Jsoup;

public class JsoupTest {

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

    MapString, String map = new HashMap();

    //map.put請根據自己的微博cookie得到

    Response res = Jsoup.connect(“別人的主頁id”)

        .cookies(map).method(Method.GET).execute();

    String s = res.body();

    System.out.println(s);

    String[] ss = s.split(“scriptFM.view”);

    int i = 0;

    // pl_content_homeFeed

    // pl.content.homeFeed.index

    ListString list = new ArrayList();

    for (String x : ss) {

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

// System.out.println(x.substring(0,

// x.length()  200 ? 200 : x.length()));

// System.out.println(“===========================================”);

      if (x.contains(“\”html\”:\””)) {

        String value = getHtml(x);

        list.add(value);

        System.out.println(value);

      }

    }

    // content=ss[8].split(“\”html\”:\””)[1].replaceAll(“(\\\\t|\\\\n)”,

    // “”).replaceAll(“\\\\\””, “\””).replaceAll(“\\\\/”, “/”);

    // content=content.substring(0,

    // content.length()=13?content.length():content.length()-13);

    // System.out.println(Native2AsciiUtils.ascii2Native(content));

  }

  public static String getHtml(String s) {

    String content = s.split(“\”html\”:\””)[1]

        .replaceAll(“(\\\\t|\\\\n)”, “”).replaceAll(“\\\\\””, “\””)

        .replaceAll(“\\\\/”, “/”);

    content = content.substring(0,

        content.length() = 13 ? content.length()

            : content.length() – 13);

    return Native2AsciiUtils.ascii2Native(content);

  }

怎麼用網絡爬蟲獲取數據基於java的

爬蟲的原理其實就是獲取到網頁內容,然後對其進行解析。只不過獲取的網頁、解析內容的方式多種多樣而已。

你可以簡單的使用httpclient發送get/post請求,獲取結果,然後使用截取字符串、正則表達式獲取想要的內容。

或者使用像Jsoup/crawler4j等這些已經封裝好的類庫,更方便的爬取信息。

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教程

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之間的轉換

最近做java網頁爬蟲用jsoup 寫了一個方法main執行正常 放在action里調用這個方法就不正常求解

import java.io.BufferedWriter;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.net.SocketTimeoutException;

import java.net.UnknownHostException;

import org.jsoup.Connection;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

public class JsoupTest {

static String url = “;lkt=1%2C1386588673481%2C1386588673481ie=utf8sst0=1386588674552p=40040100dp=1w=01019900dr=1_asf=;_ast=1386589056query=java網頁爬蟲page=1”;

public static void main(String[] args) {

Document doc = readUrlFist(url);

write(doc);

}

public static void write(Document doc) {

try {

FileOutputStream fos=new FileOutputStream(“C:\\Documents and Settings\\Administrator\\桌面\\a.html”);

OutputStreamWriter osw=new OutputStreamWriter(fos);

BufferedWriter bw=new BufferedWriter(osw);

bw.write(doc.toString());

bw.flush();

fos.close();

osw.close();

bw.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static Document readUrlFist(String url) {

Document doc = null;

Connection conn = Jsoup.connect(url);

conn.header(

“User-Agent”,

“Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 Googlebot/2.1”);

try {

doc = conn.timeout(200 * 1000).get();

} catch (IOException e) {

e.printStackTrace();

if ((e instanceof UnknownHostException)

|| (e instanceof SocketTimeoutException)) {

doc = readUrlFist(url);

}

}

return doc;

}

}

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/311542.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-05 13:23
下一篇 2025-01-05 13:23

相關推薦

  • Python七年級內容用法介紹

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

    編程 2025-04-29
  • Python條形圖添加數據標籤

    Python是一種多用途、高級、解釋型編程語言。它是一種動態類型語言,具有高級內置數據結構,支持面向對象編程、結構化編程和函數式編程方式。Python語言旨在簡化代碼的閱讀、編寫和…

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

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

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

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

    編程 2025-04-28
  • Python按標籤分類切分數據解析

    本文將為大家詳細介紹如何使用Python按標籤分類切分數據。如果您需要對數據進行分類處理,可以閱讀本文,並按照給出的例子運用到實際的項目之中。 一、按標籤分類切分數據的概念及應用場…

    編程 2025-04-28
  • 基於標籤文件管理

    本文將從文件管理的角度出發,深入探討基於標籤的文件管理。 一、標籤文件管理簡介 標籤文件管理即通過給文件打上標籤來進行分類和管理的方式。與傳統文件管理相比,標籤文件管理更加靈活方便…

    編程 2025-04-27
  • Python餅狀圖的標籤設置

    Python是一門功能強大的編程語言,可以進行各種數據可視化操作,其中餅狀圖是一種常用的圖表。在Python中,我們可以通過設置餅狀圖的標籤來實現更好的展示效果。本文將從多個方面對…

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

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

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

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

    編程 2025-04-27
  • 如何添加圖例標籤

    圖例標籤(Legend)是一種添加在圖表上的說明性標籤,可以幫助觀眾更好地理解圖表展示的數據。無論你是在製作散點圖、折線圖還是餅圖,圖例標籤都是一個必不可少的元素。本文將從以下幾個…

    編程 2025-04-27

發表回復

登錄後才能評論