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 发布开发 http 发布开发

4

1 回答 1

0

<a>该方法与and<p>标记的情况相同。标签之间的文本可通过element.innerHtml

我认为您遇到的问题是您选择的标签不存在于从该网址返回的文档中。在浏览器中,该元素会在文档加载后通过 javascript 插入到文档中。

有几种方法可以解决这个问题:

  1. 使用 API - 如果您尝试访问的服务提供 REST API,那么您可以查看您尝试访问的数据是否可通过该路由获得。如果可以的话,这是迄今为止更好的方法。

  2. 使用无头浏览器 - 这是一个非常重量级的解决方案,可能不适用于您的用例,但无论如何我都会把它作为一种可能性放在这里。在 dart 中,您可以使用puppeteer库与无头 chrome 浏览器进行交互。这样,您可以加载页面,等待脚本运行,然后抓取 DOM - 然后您应该找到您正在寻找的元素。

于 2021-07-23T20:36:30.760 回答