Как при помощи языка Dart парсить ссылки из html при помощи пакета html?
Кто знает, как на языке dart спарсить линки с хабра (ссылки постов с хабов)? Вот, что я пробовал, но никак не могу понять, как получить содержимое тега a, то есть сами ссылки:
import 'package:http/http.dart' as http;
import 'package:html/parser.dart';
import 'package:html/dom.dart';
void main() async {
String url = "https://habr.com/ru/hub/programming/";
var Titles = [];
var Links = [];
//final response = await http.Client().get(Uri.parse(test));
var response = await http.get(url);
if (response.statusCode == 200) {
var document = parse(response.body);
var _class = document.getElementsByTagName("a");
_class.forEach((element) {
print(element.text);
});
// var titles = document.getElementsByClassName("post__title_link");
// titles.forEach((element) {
// Titles.add(element.text);
// });
var links = document.getElementsByClassName('a');
print(links);
links.forEach((element) {
Links.add(element.text);
});
//print(Titles);
//print(Links);
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Вот так можно сделать с использованием Regex.
Ссылка + название:
void main() {
String s = '''DFGHJ
<a href="http://www.evernote.com/">Visit our HTML tutorial</a>
<a href="https://com.mywebsite.com/yfgvh/f23/fsd" rel="DFGHJ"></a>
DFGHJ''';
var links = <Link>[];
var regExp = new RegExp(
r'<a[^>]+href=\"(.*?)\"[^>]*>(.*)?<\/a>',
);
List<RegExpMatch> listMatches = regExp.allMatches(s).toList();
for (int i = 0; i < listMatches.length; i++) {
links.add(Link(
listMatches[i].group(1) ?? "null", listMatches[i].group(2) ?? "null"));
}
links.forEach((v) => print(v.title + ": " + v.url));
}
class Link {
final String url;
final String title;
const Link(this.url, this.title);
}
Просто ссылка:
void main() {
String s = '''DFGHJ
<a href="http://www.evernote.com/">Visit our HTML tutorial</a>
<a href="https://com.mywebsite.com/yfgvh/f23/fsd" rel="DFGHJ"></a>
DFGHJ''';
var links = <String>[];
var regExp = new RegExp(
r'<a[^>]+href=\"(.*?)\"[^>]*',
);
List<RegExpMatch> listMatches = regExp.allMatches(s).toList();
for (int i = 0; i < listMatches.length; i++) {
links.add(listMatches[i].group(1) ?? "null");
}
links.forEach(print);
}