Извлечение данных из тега во флаттере

#html #flutter #http #dart #flutter2.0

Вопрос:

Я пытаюсь получить реальные цены на золото с веб-сайта, используя этот код.

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

getWebData() async {
  final response = await http.get(Uri.parse(
      "https://www.mcxindia.com/en/market-data/get-quote/FUTCOM/GOLD/05FEB2021"));
  dom.Document document = parser.parse(response.body);
  print(document);
  var element = document.getElementById("litPrice");
}
 

Я знаю, как извлекать текст, когда он находится между <a> тегом или <p> тегом, но в данном случае это просто между <span> тегом, который выглядит так
<span id="litPrice">47526</span> Я не могу понять, как получить этот номер.

html pub dev
http pub dev

Ответ №1:

Метод будет таким же, как и в случае <a> с <p> тегами and. Текст между тегами доступен через element.innerHtml

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что выбранный вами тег отсутствует в документе, возвращенном с этого URL-адреса. В браузере этот элемент вставляется в документ с помощью javascript после загрузки документа.

Есть несколько способов, как вы могли бы справиться с этим:

  1. Используйте API — Если служба, к которой вы пытаетесь получить доступ, предоставляет API REST, вы можете увидеть, доступны ли данные, к которым вы пытаетесь получить доступ, по этому маршруту. Это гораздо лучший способ, если он доступен.
  2. Используйте браузер без головы — это действительно тяжеловесное решение, и, скорее всего, оно не подойдет для вашего варианта использования, но я все равно приведу его здесь в качестве одной из возможностей. В dart вы можете использовать библиотеку puppeteer для взаимодействия с браузером Chrome без головы. Таким образом, вы можете загрузить страницу, дождаться запуска сценариев, а затем очистить DOM — затем вы должны найти нужный элемент.

Комментарии:

1. Я пробовал element.innerHtml , но он ничего не печатает, но element.outerHtml дает <span id="litPrice"></span> не знаю почему.