c# - 使用 HTMLAgility Pack 解析网站时出现意外结果
问题描述
我处于需要在 C# 控制台应用程序中使用 HTML Agility Pack 解析页面信息的情况下,我有以下内容;
public static void ResultsData()
{
const string url = "https://example.com";
const string rowXPath = "//*[@class=\"result\"]";
var web = new HtmlWeb();
var doc = web.Load(url);
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes(rowXPath);
for (int i = 0; i < nodes.Count; i++)
{
Console.WriteLine(nodes[i].InnerText);
}
}
以上似乎返回了第二组结果,我无法弄清楚为什么?
我正在从脚本中解析信息:
<script>
var displayOrder = "ascending";
function NumberedOrder() {
if (displayOrder == "ascending")
{
document.getElementById("Order").innerHTML = "<span class=\"result\">1</span><span class=\"result\">2</span><span class=\"result\">3</span>";
document.getElementById("OrderButton").innerHTML = "Display ascending order";
displayOrder = "desc";
}
else
{
document.getElementById("Order").innerHTML = "<span class=\"result\">3</span><span class=\"result\">2</span><span class=\"result\">1</span>";
document.getElementById("OrderButton").innerHTML = "Display descending order";
displayOrder = "asc";
}
};
</script>
我希望得到以下结果:
1 2 3
我实际上得到了什么:
3 2 1
任何帮助将不胜感激,我查看了类似的线程,但没有一个帮助我实现我正在寻找的东西。
解决方案
也许由于某些模糊的实现原因,解析是从 EOF 到 BOF 执行的?
在哪种情况下,以下会产生预期的结果吗?
for (int i = nodes.Count - 1; i >= 0; i--)
{
Console.WriteLine(nodes[i].InnerText);
}
此代码似乎不必要地复杂,但我没有看到您提供的信息有任何其他解决方法,当然除了更改 Agility Pack 的源代码并编译您自己的版本。我还没有立即找到一种方法来传递参数来DocumentNode.SelectNodes
改变默认排序。
推荐阅读
- java - RecyclerView 点击位置 0 也设置为点击位置 11
- r - 如何打破R中的某些循环
- c - 为什么 getch() 在以很短的延迟调用 halfdelay() 后读取 EOF?
- angular-ui-grid - ui.grid 在 gridApi 上使用 $scope 在 $scope 上遇到错误未定义
- owl - 将时间本体与传感器数据结合使用
- sql-server - 带有 foreach 的 SQL Server 存储过程
- kubernetes - 在 DCOS 1.11 上使用 Apache Flink 和 Kubernetes 进行欺诈检测
- php - 是否可以将正则表达式捕获组作为变量?
- java - 如何打印XML中前十个数据的列表
- python - 如果它是在多个级别上的,我如何批量从 ElasticSearch 中获取信息?