C# 使用Htmlagibility Pack解析网站时出现意外结果
我需要在C#Console应用程序中使用HTML Agility Pack解析页面信息,我有以下几点:C# 使用Htmlagibility Pack解析网站时出现意外结果,c#,console-application,html-agility-pack,C#,Console Application,Html Agility Pack,我需要在C#Console应用程序中使用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);
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);
}
}
公共静态void ResultsData()
{
常量字符串url=”https://example.com";
常量字符串rowXPath=“/*[@class=\”结果\“]”;
var web=新的HtmlWeb();
var doc=web.Load(url);
HtmlNodeCollection节点=doc.DocumentNode.SelectNodes(rowXPath);
for(int i=0;i
上面的内容似乎返回了第二组结果,但我不知道为什么
我正在分析脚本中的信息:
<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>
var displayOrder=“升序”;
函数numberorder(){
如果(显示顺序=“升序”)
{
document.getElementById(“订单”).innerHTML=“123”;
document.getElementById(“OrderButton”).innerHTML=“显示升序”;
displayOrder=“desc”;
}
其他的
{
document.getElementById(“订单”).innerHTML=“321”;
document.getElementById(“OrderButton”).innerHTML=“显示降序”;
displayOrder=“asc”;
}
};
我期望得到以下结果:
一,
2.
三,
我实际上得到的是:
三,
2.
一,
任何帮助都将不胜感激,我看过类似的线程,但都没有帮助我实现我想要的。也许出于某种模糊的实现原因,解析是从EOF到BOF执行的 在这种情况下,以下操作会产生预期的结果吗
for (int i = nodes.Count - 1; i >= 0; i--)
{
Console.WriteLine(nodes[i].InnerText);
}
这段代码似乎不必要地复杂,但我看不出有任何其他方法可以绕过您提供的信息,当然除了更改Agility Pack的源代码和编译您自己的版本之外。我没有立即找到将参数传递给
DocumentNode的方法。选择Nodes
可以更改默认顺序。能否显示它正在解析的实际HTML?您向我们展示了修改页面的JavaScript。如果运行该JavaScript,并且displayOrder
不是升序
,那么它将向HTML中注入按3、2、1排序的元素,然后您将最终解析这些元素。感谢您的回复,这确实会反转结果集。但是,它仍然从“else”而不是“if”获取结果。@H3ALY它没有从else
获取结果,因为这是JavaScript,HtmlAgilityPack不会解析或运行JavaScript。我明白了。星期五我会再给它一次检查,看看我能不能想出别的办法。与此同时,祝你好运!