使用c#和HTMLAgilityPack进行Web Scraping

时间:2017-02-18 17:11:45

标签: c# xpath web-scraping html-agility-pack

Screenshot of the code and error message+variable values因此,我们的目标是从谷歌的定义中获取一个词并获得该词的词性。

我尝试过几种不同的方法,但每次都会出现空引用错误。我的代码无法访问该网页吗?这是一个防火墙问题,一个逻辑问题,一个{insert-issue-here}问题?我真的希望我对错误有一个模糊的想法。

感谢您的时间。

附录:我已尝试" // [@ id = \"来源 - luna \"] // div "和" // [@ id = \"来源 - luna \"] / div 1 "作为XPath值。



//attempt 1////////////////////////////////////////////////////////////////////////
            var term = "Hello";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.urbandictionary.com/define.php?term=" + term);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            StreamReader stream = new StreamReader(response.GetResponseStream());
            string final_response = stream.ReadToEnd();

            MessageBox.Show(final_response); //doesn't execute

//attempt 2////////////////////////////////////////////////////////////////////////
            var url = "https://www.google.co.za/search?q=define+position";
            var content = new System.Net.WebClient().DownloadString(url);
            var webGet = new HtmlWeb();
            var doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(content);
     //doc is null at runtime
            HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//*[@id=\"uid_0\"]/div[1]/div/div[1]/div[2]/div[2]/div[1]/i/span");
            if (ourNode != null)
            {
                richTextBox1.AppendText(ourNode.InnerText);
            }
            else
                richTextBox1.AppendText("null");

//attempt 3////////////////////////////////////////////////////////////////////////
var webGet = new HtmlWeb();
            var doc = webGet.Load("https://www.google.co.za/search?q=define+position");
     //doc is null at runtime
            HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//*[@id=\"uid_0\"]/div[1]/div/div[1]/div[2]/div[2]/div[1]/i/span");
            if (ourNode != null)
            {
                richTextBox1.AppendText(ourNode.InnerText);
            }
            else
                richTextBox1.AppendText("null");

//attempt 4////////////////////////////////////////////////////////////////////////
string Url = "http://www.metacritic.com/game/pc/halo-spartan-assault";
            HtmlWeb web = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = web.Load(Url);
     //doc is null at runtime
            string metascore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;
            string userscore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[2]/div[1]/div/div[2]/a/span[1]")[0].InnerText;
            string summary = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[2]/div[1]/ul/li/span[2]/span/span[1]")[0].InnerText;
            richTextBox1.AppendText(metascore + " " + userscore + " " + summary);

//attempt 5////////////////////////////////////////////////////////////////////////
             HtmlWeb web = new HtmlWeb();
             HtmlAgilityPack.HtmlDocument html = web.Load("https://www.google.co.za/search?q=define+position");
     //html is null
             var div = html.DocumentNode.SelectNodes("//*[@id=\"uid_0\"]/div[1]/div/div[1]/div[2]/div[2]/div[1]/i/span");
             richTextBox1.AppendText(Convert.ToString(div));




1 个答案:

答案 0 :(得分:0)

由于您的XPATH不正确或无法找到基于这些XPATH的任何节点,因此您将获得null。你想在这里实现什么目标?