Dart:
HTMLの構文解析
方法:
Dartでは、そのコアライブラリにHTML解析をサポートする機能を組み込んでいません。しかし、html
のようなサードパーティパッケージを使用してHTMLドキュメントを解析し、操作することができます。
まず、html
パッケージをpubspec.yaml
ファイルに追加します:
dependencies:
html: ^0.15.0
次に、パッケージをDartファイルにインポートします:
import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart';
以下は、HTMLを含む文字列を解析し、データを抽出する基本的な例です:
void main() {
var htmlDocument = """
<html>
<body>
<h1>Hello, Dart!</h1>
<p>これはサンプルHTMLの段落です</p>
</body>
</html>
""";
// HTML文字列を解析
Document document = parse(htmlDocument);
// データを抽出
String title = document.querySelector('h1')?.text ?? "タイトルが見つかりません";
String paragraph = document.querySelector('p')?.text ?? "段落が見つかりません";
print('タイトル: $title');
print('段落: $paragraph');
}
出力:
タイトル: Hello, Dart!
段落: これはサンプルHTMLの段落です
実際のウェブページとやり取りする場合は、HTTPリクエスト(http
パッケージを使用してウェブコンテンツをフェッチすること)とhtml
解析を組み合わせることがあります。ここに簡単な例を示します:
まず、html
とともにhttp
パッケージを追加します:
dependencies:
html: ^0.15.0
http: ^0.13.3
次に、ウェブからHTMLページをフェッチして解析します:
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' show parse;
void main() async {
var url = 'https://example.com';
// ウェブページをフェッチ
var response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
var document = parse(response.body);
// ページに興味のある<h1>タグがあると仮定
var headlines = document.querySelectorAll('h1').map((e) => e.text).toList();
print('ヘッドライン: $headlines');
} else {
print('リクエストはステータスで失敗しました: ${response.statusCode}。');
}
}
注意:上で示されたウェブスクレイピング技術は、ウェブサイトの利用規約に従って責任を持って使用すべきです。