Flutter使用html解析从img src获取数据



Html代码

我必须得到">

我试过了:

responseBody = responseBody.substring(responseBody.indexOf('<img src=""'));
var lt = responseBody.substring(0, responseBody.indexOf('" />'));

和this:

for (var i = 0; i < count; i++) {
print(document.getElementsByClassName("firma-isim")[i].getElementsByTagName("img")[0].getElementsByTagName("src").first;
}

但没有工作。有简单的方法吗?我该怎么做呢?

谢谢。HTML:

<div class="populer-firmalar">
<span class="firma-sol" data-kaydir=".pop-firma,sol,1"><i class="fa fa-angle-left"></i></span>
<span class="firma-sag" data-kaydir=".pop-firma,sag,1"><i class="fa fa-angle-right"></i></span>
<div class="populer-firma-holder">
<ul class="pop-firma">
<li class="active">
<div class="firma-resim">
<a href="https://kimbufirma.com/firma/a3-dijital-web-tasarim-ve-yazilim-ajansi/"><img src="https://kimbufirma.com/firma/wp-content/uploads/2021/02/a3-dijital-web-tasarim-ve-yazilim-ajansi.cropped.270x200.jpg" alt="A3 DİJİTAL | WEB TASARIM VE YAZILIM AJANSI" width="270" height="200"></a>
</div>

可以使用html解析器和html dom

var document = parse(body);
dom.Element link = document.querySelector('img');
String imageLink = link != null ? link.attributes['src'] : '';

确保导入这些

import 'package:html/dom.dart' as dom;
import 'package:html/parser.dart' show parse;

我使用正则表达式:

NetService:

import 'dart:convert';
import 'dart:io';
import 'package:meta/meta.dart';
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
import 'package:path/path.dart' as p;

class NetService {
/* ---------------------------------------------------------------------------- */
static Future<T> getJson<T>(String url) {
return http.get(Uri.parse(url))
.then((response) {
if (response.statusCode == 200) {
return jsonDecode(response.body) as T;
}
print('Status Code : ${response.statusCode}...');
return null;
})
.catchError((err) => print(err));
}
/* ---------------------------------------------------------------------------- */
static Future<String> getRaw(String url) {
return http.get(Uri.parse(url))
.then((response) {
if (response.statusCode == 200) {
return response.body;
}
print('Status Code : ${response.statusCode}...');
return null;
})
.catchError((err) => print(err));
}
}

主:

import 'dart:async';
import 'package:_samples2/networking.dart';

const kUrl = 'https://kimbufirma.com/firma/';
var regExp = RegExp(r'<a href="[wd:.-/]+"><img src="([wd:.-/]+)"');
class WebSite {
static Future<String> fetchWebPage () async {
print('Start fetching...');
return await NetService.getRaw(kUrl)
.whenComplete(() => print('Fetching done!n'));
}
}
void main(List<String> args) async {
var data = await WebSite.fetchWebPage();
var images = regExp.allMatches(data).map((e) => e.group(1)).toList();
// print(images);
print(images.where((e) => e.contains('a3')));
print(images[1]);
}

结果:

Start fetching...
Fetching done!
(https://kimbufirma.com/firma/wp-content/uploads/2021/02/a3-dijital-web-tasarim-ve-yazilim-ajansi.cropped.270x200.jpg)
https://kimbufirma.com/firma/wp-content/uploads/2021/02/a3-dijital-web-tasarim-ve-yazilim-ajansi.cropped.270x200.jpg

最新更新