作者:雯颜哥_135 | 2023-08-29 11:50
我想使用HTML敏捷包来解析复杂网页中的表,但我在对象模型中丢失了.
我查看了链接示例,但没有找到任何表数据.我可以使用XPath来获取表吗?在加载了关于如何获取表格的数据后,我基本上已经丢失了.我之前在Perl中做过这个,它有点笨拙,但很有效.(HTML::TableParser
).
如果能够解释正确的解析对象顺序,我也很高兴.
1> Marc Gravell..:
如下所示:使用HTML Agility Pack
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"
");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
Console.WriteLine("Found: " + table.Id);
foreach (HtmlNode row in table.SelectNodes("tr")) {
Console.WriteLine("row");
foreach (HtmlNode cell in row.SelectNodes("th|td")) {
Console.WriteLine("cell: " + cell.InnerText);
}
}
}
请注意,如果您需要,可以使用LINQ-to-Objects使其更漂亮:
var query = from table in doc.DocumentNode.SelectNodes("//table").Cast()
from row in table.SelectNodes("tr").Cast()
from cell in row.SelectNodes("th|td").Cast()
select new {Table = table.Id, CellText = cell.InnerText};
foreach(var cell in query) {
Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}
2> Coda..:
我发现获得特定Element的XPath最简单的就是为Firefox安装FireBug扩展程序进入网站/网页按F12以显示firebug; 右键选择并右键单击要查询的页面上的元素,然后选择"Inspect Element"Firebug将在其IDE中选择元素,然后右键单击Firebug中的Element并选择"Copy XPath",此函数将为您提供精确的XPath查询您需要使用HTML Agility Library获取所需的元素.
请记住,有时浏览器会略微更改html的DOM - 比如将
添加到(如果它缺失).默认情况下,Html Agility Pack在解析html时也不会包含