Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Vấn đề

Sau khi phân tích một tài liệu và tìm một số yếu tố, bạn sẽ muốn nhận dữ liệu bên trong các yếu tố đó.

Show

Dung dịch

  • Để nhận giá trị của một thuộc tính, hãy sử dụng phương thức
    Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    4
  • Đối với văn bản trên một phần tử (và trẻ em kết hợp của nó), hãy sử dụng
    Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    5
  • Đối với HTML, hãy sử dụng
    Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    6 hoặc
    Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    7 khi thích hợp

Ví dụ:

String html = "

An example link.

"; Document doc = Jsoup.parse(html); Element link = doc.select("a").first(); String text = doc.body().text(); // "An example link" String linkHref = link.attr("href"); // "http://example.com/" String linkText = link.text(); // "example"" String linkOuterH = link.outerHtml(); // "example" String linkInnerH = link.html(); // "example"

Sự mô tả

Các phương thức trên là cốt lõi của các phương thức truy cập dữ liệu phần tử. Có những người khác khác:

  • Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    8
  • Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
    
    9
  • mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    
    0 và
    mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    
    1

Tất cả các phương thức accessor này có các phương thức setter tương ứng để thay đổi dữ liệu.

Xem thêm

  • Tài liệu tham khảo cho lớp
    mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    
    2 và bộ sưu tập
    mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    
    3
  • Làm việc với URL
  • Tìm các yếu tố với cú pháp chọn CSS

Tôi đã sử dụng mã này:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();

Nhưng nó chỉ xóa thẻ

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
4

Bất kỳ thẻ

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
5 nào bên trong
mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
6 vẫn sẽ xuất hiện

Darkajax

15.7K11 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng11 gold badges54 silver badges65 bronze badges

Đã hỏi ngày 15 tháng 3 năm 2013 lúc 16:04Mar 15, 2013 at 16:04

Sử dụng

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
7 thay vì
mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
8 để có được văn bản kết hợp của phần tử và tất cả trẻ em của nó.

Đã trả lời ngày 15 tháng 3 năm 2013 lúc 16:08Mar 15, 2013 at 16:08

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Matt Cainmatt CainMatt Cain

5.4883 Huy hiệu vàng35 Huy hiệu bạc45 Huy hiệu Đồng3 gold badges35 silver badges45 bronze badges

Hãy thử sử dụng

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
7:

Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();

Thay vì

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
8.

Đã trả lời ngày 15 tháng 3 năm 2013 lúc 16:07Mar 15, 2013 at 16:07

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

James Donnellyjames DonnellyJames Donnelly

Huy hiệu vàng 124K3434 gold badges206 silver badges212 bronze badges

Đó là một buổi sáng chủ nhật tốt đẹp, và đột nhiên một ý tưởng cho dự án lớn tiếp theo của bạn sẽ xảy ra: "Làm thế nào về việc tôi lấy dữ liệu do Công ty X cung cấp và xây dựng một mặt trận cho nó?" Bạn nhảy vào mã hóa và nhận ra rằng Công ty X không cung cấp API cho dữ liệu của họ. Trang web của họ là nguồn duy nhất cho dữ liệu của họ.

Đã đến lúc phải dùng đến việc quét web cũ tốt, quy trình tự động để phân tích và trích xuất dữ liệu từ mã nguồn HTML của một trang web.

JSOUP, một thư viện Java thực hiện đặc tả WhatWG HTML5, có thể được sử dụng để phân tích các tài liệu HTML, tìm và trích xuất dữ liệu từ các tài liệu HTML và thao tác các phần tử HTML. Đây là một thư viện tuyệt vời để quét web đơn giản vì tính chất đơn giản và khả năng phân tích HTML giống như cách trình duyệt để bạn có thể sử dụng các bộ chọn CSS thường được biết đến.

Trong bài viết này, bạn sẽ học cách sử dụng JSOUP để quét web trong Java.

Cài đặt JSOUP

Bài viết này sử dụng Maven làm hệ thống xây dựng, vì vậy hãy chắc chắn rằng nó đã được cài đặt. Lưu ý rằng bạn cũng có thể sử dụng JSOUP mà không cần Maven. Bạn có thể tìm thấy các hướng dẫn cho điều đó trên trang tải xuống JSOUP.

Ứng dụng mà bạn sẽ xây dựng trong bài viết này có thể được tìm thấy trong GitHub nếu bạn muốn sao chép nó và làm theo, hoặc bạn có thể làm theo hướng dẫn để xây dựng ứng dụng từ đầu.

Bắt đầu bằng cách tạo một dự án Maven:

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Thư mục có tên


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

1 sẽ giữ các tệp dự án. Đối với phần còn lại của bài viết, bạn sẽ làm việc trong thư mục này.

Chỉnh sửa tệp


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

2 và thêm JSoup làm phụ thuộc vào phần

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

3:


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

Bài viết này sử dụng phiên bản


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

4, đây là phiên bản mới nhất tại thời điểm viết. Kiểm tra phiên bản nào mới nhất khi bạn đọc nó bằng cách truy cập trang tải xuống JSOUP.

Trong phần


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

5, thêm plugin Exec Maven:


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

Sử dụng JSOUP

Quét web nên luôn luôn bắt đầu với một liên lạc của con người. Trước khi nhảy thẳng vào mã hóa, trước tiên bạn nên làm quen với trang web Target. Dành thời gian để nghiên cứu cấu trúc của trang web, tìm ra dữ liệu bạn muốn cạo và xem xét mã nguồn HTML để hiểu dữ liệu được đặt ở đâu và cách cấu trúc.

Trong bài viết này, bạn sẽ cạo blog của ScrapingBee và thu thập thông tin về các blog được xuất bản: Tiêu đề, Liên kết, v.v ... Nó khá cơ bản, nhưng nó sẽ giúp bạn bắt đầu hành trình quét web của mình.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Hãy bắt đầu khám phá trang web. Mở


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

6 trong trình duyệt của bạn và nhấp vào

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

7 để mở các công cụ nhà phát triển. Nhấp vào biểu tượng con trỏ nhỏ trên góc trên cùng bên trái của bảng điều khiển. Nếu bạn di chuột qua một phần tử trên trang web khi nó được bật, nó sẽ xác định vị trí phần tử đó trong mã HTML. Nó lưu bạn khỏi điều hướng thủ công thông qua tệp HTML để xác định mã nào tương ứng với các yếu tố nào. Công cụ này sẽ là bạn của bạn trong suốt hành trình cào.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html


Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Di chuột qua bài viết trên blog đầu tiên. Bạn sẽ thấy rằng nó được đánh dấu trong bảng điều khiển và đó là


    ...
    
        org.jsoup
        jsoup
        1.14.3
    

8 với lớp

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

9. Các blog khác bên cạnh nó là mỗi

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

8 với lớp

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

1.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Bây giờ bạn có một cái nhìn tổng quan về cấu trúc rộng của dữ liệu mục tiêu trong trang web, đã đến lúc một số mã hóa. Mở tệp


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

2, xóa mã được tạo tự động và dán mã Boilerplate sau:

package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}

Phân tích cú pháp HTML

JSOUP hoạt động bằng cách phân tích HTML của một trang web và chuyển đổi nó thành một đối tượng tài liệu. Hãy nghĩ về đối tượng này như là một đại diện lập trình của DOM. Để tạo


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3 này, JSOUP cung cấp phương thức

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

4 với nhiều quá tải có thể chấp nhận các loại đầu vào khác nhau.

Một số người đáng chú ý như sau:

  1. 
        org.codehaus.mojo
        exec-maven-plugin
        3.0.0
        
        com.example.jsoupexample.App
        
    
    
    5: Phân tích tệp HTML (cũng hỗ trợ các tệp Gzipped)
  2. 
        org.codehaus.mojo
        exec-maven-plugin
        3.0.0
        
        com.example.jsoupexample.App
        
    
    
    6: Đọc một
    
        org.codehaus.mojo
        exec-maven-plugin
        3.0.0
        
        com.example.jsoupexample.App
        
    
    
    7 và phân tích cú pháp nó
  3. 
        org.codehaus.mojo
        exec-maven-plugin
        3.0.0
        
        com.example.jsoupexample.App
        
    
    
    8: phân tích chuỗi HTML

Tất cả các phương thức này trả về đối tượng phân tích cú pháp


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3.

Hãy xem cái cuối cùng trong hành động. Đầu tiên, nhập các lớp bắt buộc:

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

Trong phương thức

package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}
0, hãy viết mã sau:

________số 8

Như bạn có thể thấy, một chuỗi HTML được chuyển trực tiếp đến phương thức


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

4. Phương thức
package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}
2 của đối tượng

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3 trả về tiêu đề của trang web. Chạy ứng dụng bằng lệnh
package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}
4 và nó sẽ in
package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}
5.

Đặt một chuỗi HTML được mã hóa cứng trong phương pháp


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

4 hoạt động, nhưng nó không thực sự hữu ích. Làm thế nào để bạn có được HTML từ một trang web và phân tích nó?

Một cách là sử dụng lớp

package com.example.jsoupexample;

public class App
{
    public static void main( String[] args )
    {

    }
}
7 để đưa ra yêu cầu cho trang web và chuyển

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

7 của phản hồi cho phương thức

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

4. Đây là một số mã mẫu để làm điều đó:

package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}

Lưu ý số lượng mã nồi hơi cần thiết chỉ để lấy HTML từ trang web. Rất may, JSOUP cung cấp một phương thức

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
0 thuận tiện hơn có thể kết nối với một trang web, lấy HTML và phân tích nó thành một

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3 trong một lần.

Chỉ cần chuyển URL sang phương thức

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
0 và nó sẽ trả về một đối tượng kết nối:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
0

Bạn có thể sử dụng đối tượng này để sửa đổi các thuộc tính yêu cầu, chẳng hạn như thêm tham số bằng phương thức dữ liệu, thêm các tiêu đề bằng phương thức tiêu đề, đặt cookie bằng phương thức cookie, v.v. Mỗi phương thức trả về một đối tượng

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
3, vì vậy chúng có thể bị xích:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
1

Khi bạn đã sẵn sàng thực hiện yêu cầu, hãy gọi phương thức

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
4 hoặc
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
5 của đối tượng
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
3. Điều này sẽ trả về đối tượng

    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3 phân tích cú pháp. Viết mã sau:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
2

Mã này đã được gói trong một khối thử vì phương pháp

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
4 có thể ném
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
9. Khi bạn chạy mã này, bạn sẽ thấy tiêu đề của trang web được in.

Document document = Jsoup.parse("Web Scraping"); System.out.println(document.title()); 0 và Document document = Jsoup.parse("Web Scraping"); System.out.println(document.title()); 1

Bây giờ chúng ta hãy phân tích các blog. Đối tượng


    org.codehaus.mojo
    exec-maven-plugin
    3.0.0
    
    com.example.jsoupexample.App
    

3 cung cấp nhiều phương thức để chọn nút bạn muốn. Nếu bạn biết JavaScript, bạn sẽ thấy các phương pháp này rất giống với những gì bạn đã từng sử dụng.

Phương pháp quan trọng đầu tiên là getEuityByid. Nó tương tự như

Document document = Jsoup.parse("Web Scraping");
System.out.println(document.title());
0 trong JavaScript. Nó lấy một ID và trả về
mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
2 duy nhất với ID đó. Trang web mục tiêu của chúng tôi có

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

8 với ID là
Document document = Jsoup.parse("Web Scraping");
System.out.println(document.title());
6. Hãy chọc nó bằng
Document document = Jsoup.parse("Web Scraping");
System.out.println(document.title());
0:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
3

Lưu ý việc sử dụng phương pháp trẻ em, trả về số lượng trẻ em của

mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
2. Chạy mã này in
Document document = Jsoup.parse("Web Scraping");
System.out.println(document.title());
9, và thực sự có hai đứa trẻ của

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

8 này.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Trong ví dụ cụ thể này,

Document document = Jsoup.parse("Web Scraping");
System.out.println(document.title());
0 không hữu ích lắm vì không có nhiều yếu tố có ID, vì vậy hãy tập trung vào phương pháp quan trọng tiếp theo: getElementsByClass. Một lần nữa, nó tương tự như phương thức
package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
2 trong JavaScript. Lưu ý rằng phương thức này trả về một đối tượng phần tử và không phải là
mvn archetype:generate -DgroupId=com.example.jsoupexample -DartifactId=jsoup-example -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
2. Điều này là do có thể có nhiều yếu tố với cùng một lớp.

Nếu bạn nhớ, tất cả các blog đều có một lớp

package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
4, vì vậy bạn có thể sử dụng phương pháp này để giữ chúng:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
4

Bây giờ bạn có thể lặp lại danh sách này với vòng lặp

package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
5:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
5

Phương thức

package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
6 trả về văn bản của phần tử, tương tự như
package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
7 trong JavaScript. Khi bạn chạy mã này, bạn sẽ thấy văn bản của các blog được in.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html


package com.example.jsoupexample; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class App { public static void main(String[] args) { URL url; try { url = new URL("https://www.scrapingbee.com/blog"); HttpURLConnection connection; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("accept", "application/json"); try { InputStream responseStream = connection.getInputStream(); Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog"); System.out.println(document.title()); } catch (IOException e) { e.printStackTrace(); } } catch (IOException e1) { e1.printStackTrace(); } } catch (MalformedURLException e1) { e1.printStackTrace(); } } } 8

Bây giờ chúng ta hãy phân tích danh hiệu của mỗi blog. Bạn sẽ sử dụng phương thức Chọn cho việc này. Tương tự như

package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
9 trong JavaScript, cần có bộ chọn CSS và trả về danh sách các yếu tố phù hợp với bộ chọn đó. Trong trường hợp này, tiêu đề là một yếu tố
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
00 bên trong blog.

Hướng dẫn jsoup extract text from html - jsoup trích xuất văn bản từ html

Vì vậy, mã sau sẽ chọn tiêu đề và lấy văn bản từ nó:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
6

Bước tiếp theo là có được liên kết đến blog. Đối với điều đó, bạn sẽ sử dụng

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
01 để chọn tất cả các thẻ
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
02 bên trong phần tử blog. Để có được liên kết, hãy sử dụng phương thức attr, trả về thuộc tính được chỉ định của phần tử khớp đầu tiên. Vì mỗi blog chỉ chứa một thẻ
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
02, bạn sẽ nhận được liên kết từ thuộc tính
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
04:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
7

Chạy nó in các liên kết của các blog:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
8

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html(); 05 và String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html(); 06

Hãy xem liệu chúng ta có thể nhận được hình ảnh tiêu đề cho blog không. Lần này

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
07 sẽ không hoạt động vì có hai hình ảnh: tiêu đề và hình đại diện của tác giả. Thay vào đó, bạn có thể sử dụng phương pháp đầu tiên để có phần tử được khớp đầu tiên hoặc thay vào đó, hãy sử dụng selectfirst:

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
9

Bộ chọn CSS nâng cao với package com.example.jsoupexample; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class App { public static void main(String[] args) { URL url; try { url = new URL("https://www.scrapingbee.com/blog"); HttpURLConnection connection; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("accept", "application/json"); try { InputStream responseStream = connection.getInputStream(); Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog"); System.out.println(document.title()); } catch (IOException e) { e.printStackTrace(); } } catch (IOException e1) { e1.printStackTrace(); } } catch (MalformedURLException e1) { e1.printStackTrace(); } } } 8

Bây giờ chúng ta hãy thử hình đại diện của tác giả. Nếu bạn nhìn vào URL cho một trong các avatar, bạn sẽ nhận thấy rằng nó chứa từ "tác giả". Do đó, chúng ta có thể sử dụng một bộ chọn thuộc tính để chọn tất cả các hình ảnh có thuộc tính

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
09 chứa "tác giả". Bộ chọn tương ứng là
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
10:

Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
0

Cuối cùng, chúng ta hãy xem cách phân trang có thể được xử lý. Nhấp vào nút trang 2 đưa bạn đến

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
11. Từ đó, bạn có thể suy ra rằng bạn có thể nối số trang vào
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
12 để có được trang đó. Vì mỗi trang là một trang web riêng biệt, bạn có thể quấn mọi thứ trong vòng lặp
package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
5 và thay đổi URL thành lặp qua mỗi trang:page 2 button takes you to
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
11. From this, you can deduce that you can append the page number to
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
12 to get that page. Since each page is a separate web page, you can wrap everything in a
package com.example.jsoupexample;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

public class App {
    public static void main(String[] args) {
        URL url;
        try {
            url = new URL("https://www.scrapingbee.com/blog");
            HttpURLConnection connection;
            try {
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestProperty("accept", "application/json");

                try {
                    InputStream responseStream = connection.getInputStream();
                    Document document = Jsoup.parse(responseStream, "UTF-8", "https://www.scrapingbee.com/blog");
                    System.out.println(document.title());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

    }
}
5 loop and change the URL to iterate over each page:

Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
1

Trường hợp

String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
14 là đặc biệt vì trang đầu tiên được lưu trữ tại

    ...
    
        org.jsoup
        jsoup
        1.14.3
    

6 thay vì
String innerHtml = Jsoup.parse(htmlCode,"ISO-8859-1").select("body").html();
16.

Mã cuối cùng

Đây là mã cuối cùng với một số không gian và văn bản được thêm vào để dễ đọc hơn:

Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
2

Đây là đầu ra mẫu:

Jsoup.parse(htmlCode,"ISO-8859-1").select("body").text();
3

Nếu bạn không làm như vậy ban đầu, bạn có thể sao chép ứng dụng này từ GitHub để bạn có thể kiểm tra mã của mình chống lại nó.

Sự kết luận

JSOUP là một lựa chọn tuyệt vời để quét web trong Java. Trong khi bài viết này giới thiệu thư viện, bạn có thể tìm hiểu thêm về nó trong tài liệu JSOUP.

Mặc dù Jsoup rất dễ sử dụng và hiệu quả, nhưng nó có nhược điểm của nó. Ví dụ: nó không thể chạy mã JavaScript, điều đó có nghĩa là JSOUP không thể được sử dụng để cạo các trang web động và các ứng dụng một trang. Trong những trường hợp đó, bạn sẽ cần sử dụng một cái gì đó như selen.

Làm cách nào để nhận HTML từ JSOUP?

Trích xuất các thuộc tính, văn bản và HTML từ các phần tử..
Để có được giá trị của một thuộc tính, hãy sử dụng phương thức Node.Att (phím chuỗi) ..
Đối với văn bản trên một phần tử (và trẻ em kết hợp của nó), hãy sử dụng phần tử.text ().
Đối với html, hãy sử dụng phần tử.html () hoặc node.outerhtml () khi thích hợp ..

Chúng ta có thể sử dụng XPath trong JSoup không?

Với các biểu thức XPath, nó có thể chọn các phần tử trong HTML bằng cách sử dụng JSOUP làm trình phân tích cú pháp HTML.it is able to select the elements within the HTML using Jsoup as HTML parser.

Jsoup parse javascript có thể không?

Bằng cách gọi các phương thức JSOUP từ mã JavaScript và Python, bạn có thể phân tích chuỗi trang web hoặc chuỗi HTML và chuyển đổi nó thành mô hình DOM, sau đó đi qua DOM và tìm các phần tử cần thiết.

Jsoup Parse làm gì?

JSOUP có thể phân tích các tệp HTML, luồng đầu vào, URL hoặc thậm chí các chuỗi.Nó giúp trích xuất dữ liệu từ HTML bằng cách cung cấp các phương thức truyền tải mô hình đối tượng (DOM) và các bộ chọn giống như CSS và jQuery.JSOUP có thể thao tác nội dung: chính phần tử HTML, thuộc tính của nó hoặc văn bản của nó.parse HTML files, input streams, URLs, or even strings. It eases data extraction from HTML by offering Document Object Model (DOM) traversal methods and CSS and jQuery-like selectors. jsoup can manipulate the content: the HTML element itself, its attributes, or its text.