控制台中没有错误但什么也没有?

No Errors yet nothing in Console?

在一些代码的帮助下,我编写了使用 HttpClient.

提取数据的代码

我是编写代码的新手,所以找不到我的问题。有人可以帮我解决这个问题吗?

我希望将 table 我正在 抓取 的数据写入控制台行。

感谢任何帮助

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using HtmlAgilityPack;

namespace weatherCheck
{
    class Program
    {
        private static void Main(string[] args)
        {
            GetHtmlAsync();
            Console.ReadLine();
        }
        
        protected static async void GetHtmlAsync()
        {
            var url = "https://www.weatherzone.com.au/vic/melbourne/melbourne";

            var httpClient = new HttpClient();
            var html = await httpClient.GetStringAsync(url);

            var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(html);



            //grab the rain chance, rain in mm and date

            var MyTable = Enumerable.FirstOrDefault(htmlDocument.DocumentNode.Descendants("table")
            .Where(table => table.Attributes.Contains("id"))
, table => table.Attributes["id"].Value == "forecast-table");

            List<HtmlNode> rows = htmlDocument.DocumentNode.SelectNodes("//tr").ToList();

            foreach (var row in rows)
            {
                try
                {
                    if (MyTable != null)
                    {
                        Console.WriteLine(MyTable.GetAttributeValue("forecast-table", " "));

                    }
                }
                catch (Exception)
                {

                }
            }
        }
    }
}

来自 Doc,对于 GetAttributeValue(name,def),如果找不到属性,它将 return def。

因此,它将打印“”(如果在您的案例中找不到该属性,则为空字符串)

删除 asyncawait 因为你已经调用了 httpClient.GetStringAsync(url);

var html =httpClient.GetStringAsync(url).Result;
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);

并打印,

 Console.WriteLine(MyTable.GetAttributeValue("forecast-table","SOME_TEXT_HERE").ToString());

我使用您的代码查找值,但它也没有为我产生任何结果。当我查看 htmlDocument.DocumentNode.OuterHtml 以查看整个 Html 它正在抓取时,我在文档中看不到任何反映属性 forecast-table.

的内容

此外,您每次循环遍历行时都在验证 MyTable。您应该验证 row != null 以及来自 row.

的打印属性
var MyTable = Enumerable.FirstOrDefault(htmlDocument.DocumentNode.Descendants("table")
    .Where(table => table.Attributes.Contains("id")), table => table.Attributes["id"].Value == "forecast-table");

    List<HtmlNode> rows = htmlDocument.DocumentNode.SelectNodes("//tr").ToList();

    foreach (var row in rows)
    {
        try
        {
            if (row != null) // Here, it should be row, not My Table along with MyTable in line below.
                Console.WriteLine(row.GetAttributeValue("forecast-table", " "));
        }
        catch (Exception)
        {
        }
    }

问题是

您还应该知道,您在 chrome 上使用开发工具查看的 Html 与您在 HtmlAgilityPack 中看到的不一样。 Chrome 在执行脚本后呈现页面,其中 HtmlAgilityPack 只是为您提供页面的默认 HTML。这就是您无法获得 forecast-table.

值的原因