Dart:
Phân Tích Cú Pháp HTML
Làm thế nào:
Dart không cung cấp hỗ trợ tích hợp sẵn cho việc phân tích cú pháp HTML trong các thư viện cốt lõi của mình. Tuy nhiên, bạn có thể sử dụng gói bên thứ ba như html
để phân tích cú pháp và thao tác với tài liệu HTML.
Đầu tiên, thêm gói html
vào file pubspec.yaml
của bạn:
dependencies:
html: ^0.15.0
Sau đó, nhập gói vào file Dart của bạn:
import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart';
Dưới đây là một ví dụ cơ bản về việc phân tích cú pháp một chuỗi chứa HTML và trích xuất dữ liệu:
void main() {
var htmlDocument = """
<html>
<body>
<h1>Xin chào, Dart!</h1>
<p>Đây là một đoạn văn trong HTML mẫu</p>
</body>
</html>
""";
// Phân tích cú pháp chuỗi HTML
Document document = parse(htmlDocument);
// Trích xuất dữ liệu
String title = document.querySelector('h1')?.text ?? "Không tìm thấy tiêu đề";
String paragraph = document.querySelector('p')?.text ?? "Không tìm thấy đoạn văn";
print('Tiêu đề: $title');
print('Đoạn văn: $paragraph');
}
Kết quả:
Tiêu đề: Xin chào, Dart!
Đoạn văn: Đây là một đoạn văn trong HTML mẫu
Để tương tác với các trang web thực tế, bạn có thể kết hợp phân tích cú pháp html
với các yêu cầu HTTP (sử dụng gói http
để tải nội dung web). Dưới đây là một ví dụ nhanh:
Đầu tiên, thêm gói http
cùng với html
:
dependencies:
html: ^0.15.0
http: ^0.13.3
Sau đó, tải và phân tích cú pháp một trang HTML từ web:
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' show parse;
void main() async {
var url = 'https://example.com';
// Tải trang web
var response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
var document = parse(response.body);
// Giả định trang có các thẻ <h1> mà bạn quan tâm
var headlines = document.querySelectorAll('h1').map((e) => e.text).toList();
print('Tiêu đề: $headlines');
} else {
print('Yêu cầu thất bại với trạng thái: ${response.statusCode}.');
}
}
Lưu ý: Kỹ thuật cào dữ liệu web được trình bày ở trên nên được sử dụng một cách có trách nhiệm và tuân thủ điều khoản dịch vụ của trang web.