C#HtmlAgilityPack刷新值

时间:2017-02-21 05:26:51

标签: c# html-agility-pack

有一段时间我用C#进行编码,我正在尝试为自己和朋友创建一些小工具,但我遇到了一个问题,这使我无法继续。

问题是这个。我想使用HmtlAgilityPack来获取一个不断变化的值,以便将它用于几个不同的操作。但问题是,在我重新启动程序之前,该值会停留在相同的值上。

所以这是我正在使用的代码:

public static void Main(string[] args)
    {
        Console.WriteLine("Running the program!");
        Console.WriteLine("Reading the value!");
        int i = 0;
        string url = "Website";
        while (i < 300)
        {
            i++;
            HtmlWeb web = new HtmlWeb();
            HtmlDocument LoadWebsite = web.Load(url);
            HtmlNode rateNode = LoadWebsite.DocumentNode.SelectSingleNode("//div[@class='the-value']");
            string rate = rateNode.InnerText;
            Console.WriteLine(i + ". " + rate);
            Thread.Sleep(1000);

        }
        Console.WriteLine("Done");
        Console.ReadLine();
    }

所以这里首先加载网站。接下来它从div获取值。之后它写入值,以便我可以检查它。但它只是写着相同的价值。

我的问题是,我不知道要改变什么以获得最新值,因为值每隔几秒就会改变,我需要从我的网站获得最新值。这就像保持系统运行所需的价值一样。

1 个答案:

答案 0 :(得分:0)

在循环外声明你的HtmlWeb web = new HtmlAgilityPack.HtmlWeb();,没有必要为每个循环创建。 您可能在要抓取的网站中遇到缓存问题。

设置web.UsingCache = false;

如果不起作用,请附加一些随机字符串,以便每次调用都不同。

代码:

HtmlWeb htmlWeb = new HtmlAgilityPack.HtmlWeb();
htmlWeb.UsingCache = false;
int i = 0;
while (i < 300)
{
    var uri = new Uri($"yoururl?z={Guid.NewGuid()}");
    i++;
    HtmlAgilityPack.HtmlDocument LoadWebsite = htmlWeb.Load(uri.AbsoluteUri);
    HtmlNode rateNode = LoadWebsite.DocumentNode.SelectSingleNode("//div[@class='the-value']");
    string rate = rateNode.InnerText;
    Console.WriteLine(i + ". " + rate);
    Thread.Sleep(1000);
}