C # 및 HTMLAgilityPack을 사용한 웹 스크래핑

c# html-agility-pack web-scraping xpath

문제

코드 및 오류 메시지 + 변수 값의 스크린 샷 따라서 목표는 단어를 가져 와서 Google 정의에서 단어의 일부를 얻는 것입니다.

몇 가지 접근 방식을 시도했지만 null 참조 오류가 매번 발생합니다. 내 코드가 웹 페이지에 액세스하지 못하고 있습니까? 방화벽 문제, 논리 문제, {insert-issue-here} 문제입니까? 나는 정말로 내가 무엇이 잘못되었는지 모호하게 생각하고 싶다.

시간 내 줘서 고마워.

부록 : XPath 값으로 " // [@id = \"source - luna \ "] // "및 " // [@id = \"source - luna \ "] / div 1 "을 시도했습니다.

//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));

인기 답변

XPATH가 올바르지 않거나 해당 XPATH를 기반으로하는 노드를 찾을 수 없으므로 널이됩니다. 여기서 무엇을 이루려고합니까?



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.