有一段时间我用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获取值。之后它写入值,以便我可以检查它。但它只是写着相同的价值。
我的问题是,我不知道要改变什么以获得最新值,因为值每隔几秒就会改变,我需要从我的网站获得最新值。这就像保持系统运行所需的价值一样。
答案 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);
}