我正在编写一个函数来解析某些网站并从那里获取数据,这些函数将用于创建类的实例。在使用getElementById()函数检索数据时,我能够成功提取数据,但由于某种原因,getElementsByClassName()始终返回一个包含0个元素的节点列表。
我正在解析的网站是here。
如果您搜索'datas-nev',您将找到一个匹配项:
<p class="datas-nev"><b>Kutya neve: </b>Jhonny</p>
以下是用于解析的代码:
import 'package:html/parser.dart' show parse;
...
final response = await http.get(URL);
var document = parse(response.body);
var detailsContainer = document.getElementById('husky_details_container_right');
var dogName = new List<Node>();
dogName = document.getElementsByClassName('datas-nev');
可以成功提取detailsContainer的内容,例如,这会返回一些我稍后将使用的相关数据:
var humanBehaviourValue;
try { humanBehaviourValue = detailsContainer.nodes[1].nodes[19].nodes[1].nodes[7].nodes[1].toString(); }
catch (e) { humanBehaviourValue = 'N/A'; }
但是当我在调试窗口中检查dogName的值时,我得到以下内容:
dogName = {_growableList} size = 0
我已经尝试通过List<Node> dogName = new List<Node>();
正确初始化dogName',但它没有帮助。我也尝试了其他数据 - *值,但似乎解析器找不到它们。我甚至尝试使用数据(因为这是一个div,而其他的是段落),但这也没有帮助。
基本上我可以硬连接名称和一些数据(品种,颜色等),因为那些从未真正改变,但是避难所的位置可以改变,并通过刮取数据保持最新状态似乎比手动推送更新。这意味着我大多需要datas-helyszin
的值,但也没有解析。
答案 0 :(得分:0)
正如@GünterZöchbauer指出的那样,代码确实有效。在实际获取之前,我只是过早地寻找价值......