Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html
Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất. Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook
Hướng dẫn jsoup edit html - jsoup chỉnh sửa html
Facebook

1- Jsoup là gì?

Jsoup là Java HTML Parser. Nói cách khac Jsoup là một thư viện được sử dụng để phân tích tài liệu HTML. Jsoup cung cấp các API dùng để lấy dữ liệu và thao tác dữ liệu từ URL hoặc từ tập tin HTML. Nó sử dụng các phương thức giống với DOM, CSS , JQuery để lấy dữ liệu và thao tác với dữ liệu. Java HTML Parser. Nói cách khac Jsoup là một thư viện được sử dụng để phân tích tài liệu HTML. Jsoup cung cấp các API dùng để lấy dữ liệu và thao tác dữ liệu từ URL hoặc từ tập tin HTML. Nó sử dụng các phương thức giống với DOM, CSS , JQuery để lấy dữ liệu và thao tác với dữ liệu.

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

Hãy xem một ví dụ với Jsoup:

HelloJsoup.java


import java.io.IOException;  
import org.jsoup.Jsoup;  
import org.jsoup.nodes.Document;

public class HelloJsoup {  
   public static void main( String[] args ) throws IOException{  
       Document doc = Jsoup.connect("http://eclipse.org").get();  
       String title = doc.title();  
       System.out.println("Title : " + title);  
   }  
}

2- Thư viện Jsoup

Bạn có thể sử dụng Maven hoặc download thư viện Jsoup dưới dạng file jar. Maven hoặc download thư viện Jsoup dưới dạng file jar.

Với maven:




   org.jsoup
   jsoup
   1.8.3

Hoặc có thể download:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

3- Jsoup API

Jsoup bao gồm nhiều class, tuy nhiên có 3 class quan trọng nhất, bao gồm: bao gồm nhiều class, tuy nhiên có 3 class quan trọng nhất, bao gồm:

  • org.jsoup.Jsoup
  • org.jsoup.nodes.Document
  • org.jsoup.nodes.Element  
     

  • Jsoup.java

MethodDescription
static Connection connect(String url) Tạo và trả về đối tượng Connection kết nối tới URL. Connection kết nối tới URL.
static Document parse(File in, String charsetName) Phân tích một file tài liệu HTML với chỉ định charset . HTML với chỉ định charset .
static Document parse(File in, String charsetName, String baseUri) Phân tích file tài liệu HTML với chỉ định charset, và baseUri. HTML với chỉ định charset, và baseUri.
static Document parse(String html) Phân tích mã HTML và trả về đối tượng Document. HTML và trả về đối tượng Document.
static Document parse(String html, String baseUri) Phân tích mã HTML với baseUri thành đối tượng Document. HTML với baseUri thành đối tượng Document.
static Document parse(URL url, int timeoutMillis) Phân tích một URL thành Document. URL thành Document.
static String clean(String bodyHtml, Whitelist whitelist) Trả về HTML an toàn từ HTML đầu vào, bằng cách phân tích HTML đầu vào và lọc nó qua một danh sách trắng (Whitelist) của các thẻ và các thuộc tính được phép. HTML an toàn từ HTML đầu vào, bằng cách phân tích HTML đầu vào và lọc nó qua một danh sách trắng (Whitelist) của các thẻ và các thuộc tính được phép.

  • Document.java

MethodsDescription
static Connection connect(String url)

Tạo và trả về đối tượng Connection kết nối tới URL. body của tài liệu HTML

static Document parse(File in, String charsetName)

Phân tích một file tài liệu HTML với chỉ định charset . charset được sử dụng trong tài liệu này

static Document parse(File in, String charsetName, String baseUri)

Phân tích file tài liệu HTML với chỉ định charset, và baseUri. charset sử dụng cho tài liệu này.

static Document parse(String html)

Phân tích mã HTML và trả về đối tượng Document. copy của tài liệu này, bao gồm copy cả các node con.

static Document parse(String html, String baseUri)

Phân tích mã HTML với baseUri thành đối tượng Document.

static Document parse(URL url, int timeoutMillis)

Phân tích một URL thành Document. Document) rỗng, thích hợp cho việc thêm các phần tử vào nó.

static String clean(String bodyHtml, Whitelist whitelist)

Trả về HTML an toàn từ HTML đầu vào, bằng cách phân tích HTML đầu vào và lọc nó qua một danh sách trắng (Whitelist) của các thẻ và các thuộc tính được phép.

Methods

Element body() URL của tài liệu này.

Truy cập vào phần tử body của tài liệu HTML

Charset charset()

Trả về charset được sử dụng trong tài liệu này

void charset(Charset charset)

Sét charset sử dụng cho tài liệu này.

Document clone() Outer HTML của node này.

Tạo một phiên bản copy của tài liệu này, bao gồm copy cả các node con.

Element createElement(String tagName)

Tạo mới một phần tử 

static Document createShell(String baseUri)

Tạo một tài liệu (Document) rỗng, thích hợp cho việc thêm các phần tử vào nó.Element head()
Truy cập vào phần tử head.Element head()
Truy cập vào phần tử head.

String location() body của tài liệu này.

Trả về URL của tài liệu này.

String nodeName()

Trả về node name của node này.

Document normalise()

Normalise the document.

String outerHtml() true nếu phần tử (element) với thông tin charset trong tài liệu này được cập nhập thay đổi thông qua phương thức Document.charset(Charset).

void updateMetaCharsetElement(boolean update)

Sét đặt có hoặc không, phần tử (element) này với thông tin charset được cập nhập thay đổi thông qua phương thức  Document.charset(Charset).charset được cập nhập thay đổi thông qua phương thức  Document.charset(Charset).

  • Element.java

4- Thao tác với Document

4.1- Tạo Documet từ URL

GetDocumentFromURL.java


package org.o7planning.tutorial.jsoup.document;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class GetDocumentFromURL {
  public static void main(String[] args) throws IOException {
      Document doc = Jsoup.connect("http://eclipse.org").get();
      String title = doc.title();
      System.out.println("Title : " + title);
  }
}

Chạy ví dụ:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

4.2- Tạo Document từ File

GetDocumentFromFile.java


package org.o7planning.tutorial.jsoup.document;

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class GetDocumentFromFile {
   public static void main(String[] args) throws IOException {
       File htmlFile = new File("C:/index.html");
       Document doc = Jsoup.parse(htmlFile, "UTF-8");
       String title = doc.title();
       System.out.println("Title : " + title);
   }
}

4.3- Tạo Document từ String

GetDocumentFromString.java


package org.o7planning.tutorial.jsoup.document;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class GetDocumentFromString {
  public static void main(String[] args) throws IOException {
      String htmlString = "Simple Page"
                         + "Hello";
      Document doc = Jsoup.parse(htmlString);
      String title = doc.title();
      System.out.println("Title : " + title);
      System.out.println("Content:\n");
      System.out.println(doc.toString());
  }
}

Chạy ví dụ:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

4.2- Tạo Document từ File

4.3- Tạo Document từ String HTML đầy đủ bao gồm cả Header Body, đôi khi bạn cũng cần phân tích một đoạn HTML. Và bạn có thể lấy ra một tài liệu HTML đầy đủ bao gồm cả header & body. Hãy xem ví dụ:

ParsingBodyFragment.java


package org.o7planning.tutorial.jsoup.document;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class ParsingBodyFragment {
  public static void main(String[] args) throws IOException {
      String htmlFragment = "

Hi you!

What is this?

"; Document doc = Jsoup.parseBodyFragment(htmlFragment); String fullHtml = doc.html(); System.out.println(fullHtml); } }

Chạy ví dụ:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

4.2- Tạo Document từ File

4.3- Tạo Document từ String

4.4- Phân tích đoạn HTML Một tài liệu HTML đầy đủ bao gồm cả Header và Body, đôi khi bạn cũng cần phân tích một đoạn HTML. Và bạn có thể lấy ra một tài liệu HTML đầy đủ bao gồm cả header & body. Hãy xem ví dụ:
5- Các phương thức DOM Jsoup có một vài phương thức gần giống với các phương thức trong mô hình DOM (Một mô hình để phân tích tài liệu XML) ID, bao gồm hoặc bên dưới phần tử này.
Phương thứcMô tả
Element getElementById(String id) Tìm một phần tử cho bởi ID, bao gồm hoặc bên dưới phần tử này.
Elements getElementsByTag(String tag) Tìm các phần tử, bao gồm và cả đệ quy dưới phần tử này, với tên thẻ chỉ định.
Elements getElementsByClass(String className) Tìm phần tử có classNam cho bởi tham số, bao gồm hoặc dưới phần tử này.
Elements getElementsByAttribute(String key) Tìm kiếm các phần tử có thuộc tính cho bởi tham số, không phân biệt chữ hoa chữ thường.
Elements siblingElements() Trả về các phần tử anh em với phần tử hiện tại.
Element firstElementSibling()

Trả về phần tử anh em đầu tiên của phần tử hiện tại.

4.4- Phân tích đoạn HTML Một tài liệu HTML đầy đủ bao gồm cả Header và Body, đôi khi bạn cũng cần phân tích một đoạn HTML. Và bạn có thể lấy ra một tài liệu HTML đầy đủ bao gồm cả header & body. Hãy xem ví dụ:
5- Các phương thức DOM Jsoup có một vài phương thức gần giống với các phương thức trong mô hình DOM (Một mô hình để phân tích tài liệu XML)
Phương thứcMô tả
Element getElementById(String id) Tìm một phần tử cho bởi ID, bao gồm hoặc bên dưới phần tử này.
Elements getElementsByTag(String tag) Tìm các phần tử, bao gồm và cả đệ quy dưới phần tử này, với tên thẻ chỉ định. "class", nó có thể chứa nhiều class name, ngăn cách bởi khoảng trắng. (Ví dụ
trả về "header gray")
Elements getElementsByClass(String className) Tìm phần tử có classNam cho bởi tham số, bao gồm hoặc dưới phần tử này.
, trả về tập hợp 2 phần tử "header""gray". Chú ý, sửa đổi trên tập hợp này không làm thay đổi thuộc tính của phần tử. Muốn thay đổi sử dụng phương thức classNames(java.util.Set).
Elements getElementsByAttribute(String key) Tìm kiếm các phần tử có thuộc tính cho bởi tham số, không phân biệt chữ hoa chữ thường. text của nó và tất cả các text của tất cả các phần tử con.
Elements siblingElements() Trả về các phần tử anh em với phần tử hiện tại.
Element firstElementSibling() Trả về phần tử anh em đầu tiên của phần tử hiện tại. HTML bên trong thẻ này. Ví dụ

a

trả về

a

. (Node.outerHtml() sẽ trả về

a

.)
Element lastElementSibling() Trả về phần tử anh em cuối cùng của phần tử hiện tại. HTML sẵn có bên trong.
  ...... Các phương thức lấy dữ liệu trên Element.
String attr(String key) Trả về giá trị thuộc tính cho bởi key của phần tử này.
Element firstElementSibling()

Trả về phần tử anh em đầu tiên của phần tử hiện tại.

Element lastElementSibling() Trả về phần tử anh em cuối cùng của phần tử hiện tại.
  ...... Các phương thức lấy dữ liệu trên Element.
String attr(String key) Trả về giá trị thuộc tính cho bởi key của phần tử này.
void attr(String key, String value) Sét giá trị thuộc tính. Nếu thuộc tính đã tồn tại, nó sẽ bị thay thế.
String id() Trả về thuộc tính ID, nếu có, hoặc trả về string rỗng nếu không có.
String className() Trả về chuỗi chữ giá trị của thuộc tính "class", nó có thể chứa nhiều class name, ngăn cách bởi khoảng trắng. (Ví dụ trả về "header gray")
Set classNames() Trả về tất cả các class names. Ví dụ , trả về tập hợp 2 phần tử "header" và "gray". Chú ý, sửa đổi trên tập hợp này không làm thay đổi thuộc tính của phần tử. Muốn thay đổi sử dụng phương thức classNames(java.util.Set).
String text() Trả về một văn bản kết hợp text của nó và tất cả các text của tất cả các phần tử con.
Element firstElementSibling()

Trả về phần tử anh em đầu tiên của phần tử hiện tại. DOM, phân tích một tài liệu HTML ghi ra các thông tin trong thẻ form.

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

register.html






Register


   
User Name
Password
Email

ReadHtmlForm.java


package org.o7planning.tutorial.jsoup.dom;

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class ReadHtmlForm {
   public static void main(String[] args) throws IOException {
       Document doc = Jsoup.parse(new File("files/register.html"), "utf-8");
       Element form = doc.getElementById("registerForm");
       System.out.println("Form action = "+ form.attr("action"));
       Elements inputElements = form.getElementsByTag("input");
       for (Element inputElement : inputElements) {
           String key = inputElement.attr("name");
           String value = inputElement.attr("value");
           System.out.println(key + " =  " + value);
       }
   }
}

Chạy ví dụ:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

GetAllLinks.java


package org.o7planning.tutorial.jsoup.dom;

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class GetAllLinks {
   public static void main(String[] args) throws IOException {
       Document doc = Jsoup.connect("http://o7planning.org").get();
       // Elements extends ArrayList.
       Elements aElements = doc.getElementsByTag("a");
       for (Element aElement : aElements) {
           String href = aElement.attr("href");
           String text = aElement.text();
           System.out.println(text);
           System.out.println("\t" + href);
       }
   }
}

Chạy ví dụ:

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

Element lastElementSibling()

Trả về phần tử anh em cuối cùng của phần tử hiện tại.

  ...... cung cấp cho bạn một vài phương thức để làm việc này:

  • Các phương thức lấy dữ liệu trên Element.
  • String attr(String key)

Trả về giá trị thuộc tính cho bởi key của phần tử này.


Connection conn = Jsoup.connect("http://o7planning.org");
Document doc = conn.get();

// Phần tử a với thuộc tính href
Elements links = doc.select("a[href]");
// img với thuộc tính src kết thúc bởi .png
Elements pngs = doc.select("img[src$=.png]");
// div với class=masthead
Element masthead = doc.select("div.masthead").first();
// Phần tử a ngay sau h3.
Elements resultLinks = doc.select("h3.r > a");

void attr(String key, String value) JSoup hỗ trợ bạn cú pháp giống với CSS (hoặc JQuery) giúp bạn tìm kiếm các phần tử phù hợp. Những hỗ trợ như vậy là rất mạnh mẽ. Các phương thức lựa chọn có sẵn trong lớp Document, Element hoặc Elements.

Sét giá trị thuộc tính. Nếu thuộc tính đã tồn tại, nó sẽ bị thay thế.

String id() Một tài liệu HTML đầy đủ bao gồm cả Header và Body, đôi khi bạn cũng cần phân tích một đoạn HTML. Và bạn có thể lấy ra một tài liệu HTML đầy đủ bao gồm cả header & body. Hãy xem ví dụ:
5- Các phương thức DOM Jsoup có một vài phương thức gần giống với các phương thức trong mô hình DOM (Một mô hình để phân tích tài liệu XML) a
Phương thứcMô tảfb|name nghĩa là tìm các phần tử
#id Tìm kiếm phần tử theo ID, ví dụ #logo#logo
.class: Tìm kiếm các phần tử theo tên class, ví dụ .masthead.masthead
[attribute] Các phần tử với thuộc tính, ví dụ [href][href]
[^attr] Các phần tử với thuộc tính bắt đầu bởi, ví dụ [^data-] tìm kiếm các phần tử với thuộc tính bắt đầu bởi data- [^data-] tìm kiếm các phần tử với thuộc tính bắt đầu bởi data-
[attr=value] Các phần tử với giá trị thuộc tính, ví dụ [width=500] (Cũng có thể sử dụng dấu nháy kép) [width=500] (Cũng có thể sử dụng dấu nháy kép)
[attr^=value], [attr$=value], [attr*=value] Các phần tử với giá trị thuộc tính bắt đầu, kết thúc bởi, hoặc chứa giá trị, ví dụ [href*=/path/][href*=/path/]
[attr~=regex] Các phần tử với giá trị khớp với biểu thức chính quy, ví dụ img[src~=(?i)\.(png|jpe?g)]img[src~=(?i)\.(png|jpe?g)]
* Tất cả các phần tử, ví dụ **

Selector kết hợp

Selector Mô tả
el#id Phần tử với ID, ví dụ div#logodiv#logo
el.class Các phần tử với class, ví dụ div.mastheaddiv.masthead
el[attr] Các phần tử với thuộc tính, ví dụ a[href]a[href]
Kết hợp bất kỳ Ví dụ a[href].highlighta[href].highlight
ancestor child (Phần tử tổ tiên- và hậu duệ) Các phần tử hậu duệ của một phần tử, ví dụ. .body p tìm kiếm các phần tử p bất kỳ là hậu duệ của phần tử có thuộc tính class = "body". .body p tìm kiếm các phần tử p bất kỳ là hậu duệ của phần tử có thuộc tính class = "body".
parent > child Các phần tử con trực tiếp của phần tử cha, ví dụ div.content > p tìm kiếm các phần tử p là con trực tiếp của div có class ='content'; và body > * tìm kiếm các phần tử con trực tiếp của thẻ body. div.content > p tìm kiếm các phần tử p là con trực tiếp của div class ='content'; và body > * tìm kiếm các phần tử con trực tiếp của thẻ body.
siblingA + siblingB Tìm kiếm phần tử anh em B ngay phía trước của phần tử A, ví dụ div.head + divdiv.head + div
siblingA ~ siblingX Tìm kiếm các phần tử anh em X trước phần tử A, ví dụ h2 ~ ph2 ~ p
el, el, el Nhóm nhiều Selector, tìm kiếm các phần tử khớp với một trong những Selector; ví dụ div.masthead, div.logodiv.masthead, div.logo

Pseudo selectors

Selector Mô tả
el#id Phần tử với ID, ví dụ div#logotd:lt(3)
el.class Các phần tử với class, ví dụ div.mastheaddiv p:gt(2)
el[attr] Các phần tử với thuộc tính, ví dụ a[href]
Kết hợp bất kỳ Ví dụ a[href].highlightdiv:has(p)
ancestor child (Phần tử tổ tiên- và hậu duệ) Các phần tử hậu duệ của một phần tử, ví dụ. .body p tìm kiếm các phần tử p bất kỳ là hậu duệ của phần tử có thuộc tính class = "body". div:not(.logo)
parent > child Các phần tử con trực tiếp của phần tử cha, ví dụ div.content > p tìm kiếm các phần tử p là con trực tiếp của div có class ='content'; và body > * tìm kiếm các phần tử con trực tiếp của thẻ body. p:contains(jsoup)
siblingA + siblingB Tìm kiếm phần tử anh em B ngay phía trước của phần tử A, ví dụ div.head + div
siblingA ~ siblingX Tìm kiếm các phần tử anh em X trước phần tử A, ví dụ h2 ~ pdiv:matches((?i)login)
el, el, el Nhóm nhiều Selector, tìm kiếm các phần tử khớp với một trong những Selector; ví dụ div.masthead, div.logo
Pseudo selectors

QueryLinks.java




   org.jsoup
   jsoup
   1.8.3

0

:lt(n)

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html

document.html




   org.jsoup
   jsoup
   1.8.3

1

SelectorDemo1.java




   org.jsoup
   jsoup
   1.8.3

2

:lt(n)

Hướng dẫn jsoup edit html - jsoup chỉnh sửa html