/ / Cách cạo trang web và tìm nạp dữ liệu bằng Rust

Cách cạo trang web và tìm nạp dữ liệu bằng Rust

Quét web là một kỹ thuật phổ biến để thu thập lượng lớn dữ liệu từ các trang web một cách nhanh chóng và hiệu quả. Trong trường hợp không có API, quét web có thể là cách tiếp cận tốt nhất tiếp theo.


Tốc độ và độ an toàn bộ nhớ của Rust làm cho ngôn ngữ này trở nên lý tưởng để xây dựng trình quét web. Rust là nơi có nhiều thư viện trích xuất dữ liệu và phân tích cú pháp mạnh mẽ, đồng thời khả năng xử lý lỗi mạnh mẽ của nó rất hữu ích cho việc thu thập dữ liệu web hiệu quả và đáng tin cậy.


Quét web trong Rust

Nhiều thư viện phổ biến hỗ trợ quét web trong Rust, bao gồm reqwest, scraper, select và html5ever. Hầu hết các nhà phát triển Rust kết hợp chức năng từ reqwest và scraper để quét web của họ.

Thư viện reqwest cung cấp chức năng thực hiện các yêu cầu HTTP tới máy chủ web. Reqwest được xây dựng dựa trên tích hợp sẵn của Rust siêu crate trong khi cung cấp API cấp cao cho các tính năng HTTP tiêu chuẩn.

Scraper là một thư viện quét web mạnh mẽ giúp phân tích cú pháp các tài liệu HTML và XML, đồng thời trích xuất dữ liệu bằng cách sử dụng bộ chọn CSS và biểu thức XPath.

Sau khi tạo một dự án Rust mới với hàng hóa mới lệnh, thêm yêu cầucái nạo thùng vào phần phụ thuộc của bạn hàng hóa.toml tài liệu:

 [dependencies]
reqwest = {version = "0.11", features = ["blocking"]}
scraper = "0.12.0"

bạn sẽ sử dụng yêu cầu để gửi các yêu cầu HTTP và cái nạo để phân tích cú pháp.

Truy xuất các trang web với Reqwest

Bạn sẽ gửi yêu cầu về nội dung của trang web trước khi phân tích cú pháp để truy xuất dữ liệu cụ thể.

Bạn có thể gửi yêu cầu GET và truy xuất nguồn HTML của trang bằng cách sử dụng chữ chức năng trên lấy chức năng của yêu cầu thư viện:

 fn retrieve_html() -> String {
    let response = get("https://news.ycombinator.com").unwrap().text().unwrap();
    return response;
}

Các lấy chức năng gửi yêu cầu đến trang web và chữ hàm trả về văn bản của HTML.

Phân tích cú pháp HTML bằng Scraper

Các lấy_html trả về văn bản của HTML và bạn sẽ cần phân tích cú pháp văn bản HTML để truy xuất dữ liệu cụ thể mà bạn cần.

Scraper cung cấp chức năng để tương tác với HTML trong HtmlBộ chọn mô-đun. Các Html mô-đun cung cấp chức năng phân tích cú pháp tài liệu và Bộ chọn mô-đun cung cấp chức năng để chọn các phần tử cụ thể từ HTML.

Đây là cách bạn có thể truy xuất tất cả các tiêu đề trên một trang:

 use scraper::{Html, Selector};

fn main() {
    let response = reqwest::blocking::get(
        "https://news.ycombinator.com/").unwrap().text().unwrap();

    
    let doc_body = Html::parse_document(&response);

    
    let title = Selector::parse(".titleline").unwrap();
        
    for title in doc_body.select(&title) {
        let titles = title.text().collect::<Vec<_>>();
        println!("{}", titles[0])
    }
}

Các parse_document chức năng của Html mô-đun phân tích cú pháp văn bản HTML và phân tích cú pháp chức năng của Bộ chọn mô-đun chọn các thành phần bằng bộ chọn CSS đã chỉ định (trong trường hợp này, tiêu đề lớp học).

Các vòng lặp đi qua các phần tử này và in khối văn bản đầu tiên từ mỗi phần tử.

Đây là kết quả của hoạt động:

kết quả từ việc truy xuất tiêu đề từ một trang web

Chọn thuộc tính với Scraper

Để chọn một giá trị thuộc tính, hãy truy xuất các phần tử được yêu cầu như trước và sử dụng attr phương thức của thể hiện giá trị thẻ:

 use reqwest::blocking::get;
use scraper::{Html, Selector};

fn main() {
    let response = get("https://news.ycombinator.com").unwrap().text().unwrap();
    let html_doc = Html::parse_document(&response);
    let class_selector = Selector::parse(".titleline").unwrap();

    for element in html_doc.select(&class_selector) {
        let link_selector = Selector::parse("a").unwrap();

        for link in element.select(&link_selector) {
            if let Some(href) = link.value().attr("href") {
                println!("{}", href);
            }
        }
    }
}

Sau khi chọn các phần tử với tiêu đề lớp sử dụng phân tích cú pháp chức năng, các vòng lặp đi qua chúng. Bên trong vòng lặp, mã sau đó tìm nạp Một đánh dấu và chọn href thuộc tính với attr chức năng.

Các chủ yếu chức năng in các liên kết này, với kết quả như sau:

kết quả từ việc truy xuất URL từ một trang web

Bạn có thể xây dựng các ứng dụng web phức tạp trong Rust

Gần đây, Rust đã được sử dụng làm ngôn ngữ để phát triển web từ giao diện người dùng đến phát triển ứng dụng phía máy chủ.

Bạn có thể tận dụng hợp ngữ web để xây dựng các ứng dụng web đầy đủ với các thư viện như Yew và Percy hoặc xây dựng các ứng dụng phía máy chủ với Actix, Rocket và loạt thư viện trong hệ sinh thái Rust cung cấp chức năng để xây dựng các ứng dụng web.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *