繁体   English   中英

DocumentNode.SelectNodes 返回 null - HtmlAgilityPack

[英]DocumentNode.SelectNodes returns null - HtmlAgilityPack

我想获取存储在 Html 源代码的span标签中的不同电影的 IMDB 评级。 为此,我尝试使用 Html 解析从 HTML 跨度标签收集数据。 一切正常,直到调用 DocumentNode 的 SelectNodes() 方法返回 null。

我知道这个问题之前已经被问过很多次了,但是尽管做了很多研究并尝试了不同的解决方案,我似乎还是无法弄清楚我的代码有什么问题。 为了完成我的学期项目,解决这个问题对我来说真的很重要,所以任何形式的帮助都将不胜感激。 谢谢。

string url = "https://www.google.com/search?client=opera&q=into+the+wild&sourceid=opera&ie=UTF-8&oe=UTF-8";

        StreamReader sourceCode = makeHttpRequest(url);
        //makeRequest() returns the html source code of the url
        String sourceCodeString = sourceCode.ReadToEnd();

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(sourceCodeString);
        var itemList = doc.DocumentNode.SelectNodes("//span[@class='_tvg']")
                .Select(p => p.InnerText)
                .ToList();

这里的关键点是设置用户代理。

下面的代码返回 3 个结果,如果您删除User-Agent您将获得一个空值...

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
    var html = await client.GetStringAsync("https://www.google.com/search?client=opera&q=into+the+wild&sourceid=opera&ie=UTF-8&oe=UTF-8");
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    var result = doc.DocumentNode
                    .SelectNodes("//span[@class='_tvg']")
                    .Select(p => p.InnerText)
                    .ToList();


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM