Jsoup nhận biến javascript

Hướng dẫn JSoup hướng dẫn giới thiệu về trình phân tích cú pháp HTML JSoup. Trong hướng dẫn này, chúng ta sẽ phân tích cú pháp dữ liệu HTML từ chuỗi HTML, tệp HTML cục bộ và trang web. Chúng tôi sẽ vệ sinh dữ liệu và thực hiện tìm kiếm trên Google

JSoup là một thư viện Java để trích xuất và thao tác dữ liệu HTML. Nó triển khai đặc tả HTML5 và phân tích cú pháp HTML thành cùng một DOM như các trình duyệt hiện đại

Các tính năng của JSoup

Với JSoup, chúng tôi có thể

  • cạo và phân tích cú pháp HTML từ một URL, tệp hoặc chuỗi
  • tìm và trích xuất dữ liệu, sử dụng trình duyệt DOM hoặc bộ chọn CSS
  • thao tác với các thành phần, thuộc tính và văn bản HTML
  • làm sạch nội dung do người dùng gửi vào danh sách trắng an toàn, để ngăn chặn các cuộc tấn công XSS
  • đầu ra HTML gọn gàng

Trong các ví dụ của hướng dẫn này, chúng tôi sử dụng phụ thuộc Gradle sau

implementation 'org.jsoup:jsoup:1.15.2'

lớp JSoup

Lớp

Document doc = Jsoup.parse(htmlString);
4 cung cấp điểm truy cập công khai cốt lõi cho chức năng jsoup thông qua các phương thức tĩnh của nó. Chẳng hạn, phương thức
Document doc = Jsoup.parse(htmlString);
5 làm sạch mã HTML, phương thức
Document doc = Jsoup.parse(htmlString);
6 tạo kết nối tới URL hoặc phương thức
Document doc = Jsoup.parse(htmlString);
7 phân tích nội dung HTML

Trong một số ví dụ, chúng tôi sử dụng tệp HTML sau



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words

JSoup phân tích cú pháp chuỗi HTML

Phương thức

Document doc = Jsoup.parse(htmlString);
8 chuyển một chuỗi HTML vào một tài liệu

com/zetcode/JSoupFromStringEx. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}

Ví dụ phân tích một chuỗi HTML và xuất tiêu đề và nội dung cơ thể của nó

________số 8_______

Chuỗi này chứa dữ liệu HTML đơn giản

Document doc = Jsoup.parse(htmlString);

Với phương thức

Document doc = Jsoup.parse(htmlString);
7 của Jsoup, chúng tôi phân tích cú pháp chuỗi HTML. Phương thức trả về một tài liệu HTML

String title = doc.title();

Phương thức

String title = doc.title();
0 của tài liệu lấy nội dung chuỗi của phần tử tiêu đề của tài liệu

String body = doc.body().text();

Phương thức

String title = doc.title();
1 của tài liệu trả về phần tử body;

Trong ví dụ thứ hai, chúng tôi sẽ phân tích một tệp HTML cục bộ. Chúng tôi sử dụng phương thức

String title = doc.title();
3 quá tải lấy đối tượng
String title = doc.title();
4 làm tham số đầu tiên của nó

src/chính/tài nguyên/chỉ mục. html


    
        My title
        
    
    
        

Contents of a div element

Ví dụ, chúng tôi sử dụng tệp HTML ở trên

com/zetcode/JSoupFromFileEx. java

package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}

Ví dụ phân tích cú pháp tệp

String title = doc.title();
5, nằm trong thư mục
String title = doc.title();
6

Document doc = Jsoup.parse(new File(fileName), "utf-8"); 

Chúng tôi phân tích cú pháp tệp HTML bằng phương thức

String title = doc.title();
3



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
0

Với phương pháp

String title = doc.title();
8 của tài liệu, chúng tôi lấy phần tử theo ID của nó



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
1

Văn bản của thẻ được truy xuất bằng phương thức

String title = doc.title();
2 của phần tử

JSoup đọc tiêu đề của trang web

Trong ví dụ sau, chúng tôi cạo và phân tích cú pháp một trang web và truy xuất nội dung của phần tử tiêu đề

com/zetcode/JSoupTitleEx. java



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
2

Trong ví dụ mã, chúng tôi đọc tiêu đề của một trang web được chỉ định



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
3

Phương thức

Document doc = Jsoup.parse(htmlString);
6 của Jsoup tạo kết nối đến URL đã cho. Phương thức
String body = doc.body().text();
1 thực thi một yêu cầu GET và phân tích kết quả;

String title = doc.title();

Với phương thức

String title = doc.title();
0 của tài liệu, chúng ta có được tiêu đề của tài liệu HTML

Ví dụ tiếp theo truy xuất mã nguồn HTML của trang web

com/zetcode/JSoupHtmlPageEx. java



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
5

Ví dụ in HTML của một trang web



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
6

Phương thức

String body = doc.body().text();
3 trả về HTML của một phần tử;

Thông tin meta của tài liệu HTML cung cấp siêu dữ liệu có cấu trúc về một trang Web, chẳng hạn như mô tả và từ khóa của nó

com/zetcode/JSoupMetaInfoEx. java



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
7

Ví dụ mã truy xuất thông tin meta về một trang web được chỉ định



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
8

Phương pháp

String body = doc.body().text();
4 của tài liệu tìm các phần tử khớp với truy vấn đã cho. Phương thức
String body = doc.body().text();
5 trả về phần tử khớp đầu tiên. Với phương thức
String body = doc.body().text();
6 ta lấy giá trị của thuộc tính
String body = doc.body().text();
7

Để lấy tất cả các thẻ, chúng tôi chuyển ký tự

String body = doc.body().text();
8 cho phương thức
String body = doc.body().text();
4

com/zetcode/JSoupAll. java



    
    Document title


List of words

  • dark
  • smart
  • war
  • cloud
  • park
  • cup
  • worm
  • water
  • rock
  • warm
footer for words
9

Chúng tôi lấy tất cả các thẻ từ tài liệu


    
        My title
        
    
    
        

Contents of a div element

0

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
0

Chúng tôi nhận được tất cả các yếu tố

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
1

Chúng tôi xem qua tất cả các yếu tố và in tên thẻ của chúng bằng


    
        My title
        
    
    
        

Contents of a div element

1

Phương thức

String title = doc.title();
2 lấy văn bản kết hợp của phần tử này và tất cả phần tử con của nó. Khoảng trắng được chuẩn hóa và cắt bớt

com/zetcode/JSoupGetText. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
2

Trong ví dụ này, chúng tôi lấy dữ liệu văn bản từ toàn bộ tài liệu, nội dung, đoạn văn, danh sách không có thứ tự và mục danh sách đầu tiên và cuối cùng

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
3

JSoup thay đổi văn bản

Phương thức

String title = doc.title();
2 quá tải đặt văn bản của phần tử được chỉ định

com/zetcode/JSoupChangeText. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
4

Trong ví dụ, chúng tôi thay đổi văn bản bên trong thẻ

String title = doc.title();
1

Có nhiều phương pháp để sửa đổi tài liệu HTML. Chẳng hạn, phương thức


    
        My title
        
    
    
        

Contents of a div element

5 thêm một thẻ và phương thức

    
        My title
        
    
    
        

Contents of a div element

6 thêm một thẻ vào một phần tử

com/zetcode/JSoupModify. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
5

Trong ví dụ, chúng tôi thêm các thẻ


    
        My title
        
    
    
        

Contents of a div element

7 và

    
        My title
        
    
    
        

Contents of a div element

8 vào tài liệu

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
6

Liên kết phân tích cú pháp JSoup

Ví dụ tiếp theo phân tích các liên kết từ một trang HTML

com/zetcode/JSoupLinksEx. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
7

Trong ví dụ này, chúng tôi kết nối với một trang web và phân tích cú pháp tất cả các thành phần liên kết của nó

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
8

Để có được danh sách các liên kết, chúng tôi sử dụng phương pháp

String body = doc.body().text();
4 của tài liệu

JSoup cung cấp các phương thức để khử trùng dữ liệu HTML

com/zetcode/JSoupSanitizeEx. java

package com.zetcode;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JSoupFromStringEx {

    public static void main(String[] args) {

        String htmlString = """
                My title
                Body content""";

        Document doc = Jsoup.parse(htmlString);
        String title = doc.title();
        String body = doc.body().text();

        System.out.printf("Title: %s%n", title);
        System.out.printf("Body: %s", body);
    }
}
9

Trong ví dụ này, chúng tôi vệ sinh và làm sạch dữ liệu HTML

String htmlString = """
    My title
    Body content""";
0

Chuỗi HTML chứa phần tử trung tâm, phần tử này không được dùng nữa

String htmlString = """
    My title
    Body content""";
1

Phương thức

package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}
0 xác định xem chuỗi có phải là HTML hợp lệ hay không. Danh sách trắng là danh sách HTML (phần tử và thuộc tính) có thể chuyển qua trình dọn dẹp.
package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}
1 xác định một tập hợp các thẻ HTML sạch cơ bản

String htmlString = """
    My title
    Body content""";
2

Với sự trợ giúp của

package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}
2, chúng tôi xóa tài liệu HTML bẩn

String htmlString = """
    My title
    Body content""";
3

Chúng ta có thể thấy rằng phần tử trung tâm đã bị xóa

Ví dụ sau thực hiện tìm kiếm Google với Jsoup

com/zetcode/JsoupGoogleSearchEx. java

String htmlString = """
    My title
    Body content""";
4

Ví dụ tạo yêu cầu tìm kiếm cụm từ "Milky Way". Nó in mười tên miền phù hợp với thuật ngữ

String htmlString = """
    My title
    Body content""";
5

Tìm kiếm của Google trả về các liên kết dài mà từ đó chúng tôi muốn lấy tên miền. Đối với điều này, chúng tôi sử dụng một mẫu biểu thức chính quy

String htmlString = """
    My title
    Body content""";
6

package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}
3 trả về một tên miền từ liên kết tìm kiếm bằng cách sử dụng trình so khớp cụm từ thông dụng

String htmlString = """
    My title
    Body content""";
7

Đây là thuật ngữ tìm kiếm của chúng tôi

String htmlString = """
    My title
    Body content""";
8

Đây là URL để thực hiện tìm kiếm trên Google

String htmlString = """
    My title
    Body content""";
9

Chúng tôi kết nối với URL, đặt thời gian chờ 5 giây và gửi yêu cầu NHẬN. Một tài liệu HTML được trả lại

Document doc = Jsoup.parse(htmlString);
0

Từ tài liệu, chúng tôi chọn các liên kết

Document doc = Jsoup.parse(htmlString);
1

Chúng tôi tìm kiếm các liên kết không có thuộc tính class="_Zkb" và có

package com.zetcode;

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

public class JSoupFromFileEx {
    
    public static void main(String[] args) throws IOException {
        
        String fileName = "src/main/resources/index.html";
        
        Document doc = Jsoup.parse(new File(fileName), "utf-8"); 
        Element divTag = doc.getElementById("mydiv"); 
        
        System.out.println(divTag.text());
    }
}
4. Lưu ý rằng đây là những giá trị được mã hóa cứng có thể thay đổi trong tương lai

Làm cách nào để sử dụng Jsoup trong JavaScript?

Trích xuất giá trị từ thuộc tính phần tử bằng cách sử dụng Jsoup và Giai đoạn JavaScript .
Khai báo các lớp Java và các biến JavaScript sẽ được sử dụng. .
Tiếp theo, chúng tôi kéo các phần tử “div” ra và tìm một phần tử có ID là “featured-img. ” Khi chúng tôi tìm thấy nó, chúng tôi 'ngắt' vòng lặp và tiếp tục

Phần tử trong Jsoup là gì?

Phần tử HTML bao gồm tên thẻ, thuộc tính và nút con (bao gồm nút văn bản và các phần tử khác) . Từ một Phần tử, bạn có thể trích xuất dữ liệu, duyệt qua biểu đồ nút và thao tác với HTML.