【问题标题】:HTML Document parse by HtmlAgilityPack return null由 HtmlAgilityPack 解析的 HTML 文档返回 null
【发布时间】:2020-04-02 16:53:09
【问题描述】:

我正在尝试下载网站上<code></code> 标签之间的任何内容,不幸的是,选择节点"//code" 返回null。我不知道为什么。这是我的代码:

 public void TAF_download()
        {
            var html = @"https://www.aviationweather.gov/taf/data?ids=KDEN&format=raw&metars=off&layout=off/";

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            var TAF = doc.DocumentNode.SelectSingleNode("//code");
            Console.WriteLine(TAF.OuterHtml);
        }

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

    HtmlDocument.LoadHtml(string html) 的参数必须是 HTML,而不是 URL。

    你可以试试这个(不包括异常处理):

        public void TAF_download()
        {
            var url = @"https://www.aviationweather.gov/taf/data?ids=KDEN&format=raw&metars=off&layout=off/";
    
            string html;
    
            var request = WebRequest.CreateHttp(url);
    
            using (var response = request.GetResponse())
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                html = reader.ReadToEnd();
            }
    
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            var TAF = doc.DocumentNode.SelectSingleNode("//code");
            Console.WriteLine(TAF.OuterHtml);
        }
    

    还有一个HtmlAgilityPack.HtmlWeb类支持下载网址,不过我自己一般不会用(其实我忘了)。

    例如:

        public void TAF_download()
        {
            var url = @"https://www.aviationweather.gov/taf/data?ids=KDEN&format=raw&metars=off&layout=off/";
    
            HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    
            HtmlAgilityPack.HtmlDocument doc = web.Load(url);
            var TAF = doc.DocumentNode.SelectSingleNode("//code");
            Console.WriteLine(TAF.OuterHtml);
        }
    

    话虽如此,您应该寻找一个更好的数据源,一个不需要抓取 HTML 的数据源...也许是此处列出的选项之一 https://www.aviationweather.gov/dataserver

    【讨论】:

    • 首先感谢第一部分 - 肯定会用于教育目的。根据 dataserver - 我找不到合理格式的 TAF 输出,这就是我使用报废的原因。我看到 dataserver 提供了 XML 输出,XmlReader 应该很容易做到这一点。谢谢 x2!
    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 2012-11-04
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多