2017-09-01 76 views
0

错误“HtmlAgilityPack.HtmlNode.SelectSingleNode(...)返回null”。 我的示例代码。HTML敏捷包为什么HTML页面没有字符串?

  string url = @"http://www.baza-firm.com.pl/?vm=zabrze&pg=2&b_szukaj=szukaj"; 
     HtmlWeb web = new HtmlWeb(); 
     //Process.Start(url); //wyswietlenie strony 
     var doc1 = web.Load(url); 

     MessageBox.Show(doc1.DocumentNode.OuterHtml.ToString()); 


     var nazwa = doc1.DocumentNode.SelectSingleNode("//span[@class='przeppoz']").InnerText; 
     var ulica = doc1.DocumentNode.SelectSingleNode("//div[@itemprop='streetAddress']").InnerText; 
     var kod_pocztowy = doc1.DocumentNode.SelectSingleNode("//div/span[@itemprop='postalCode']").InnerText; 
     var miejscowość = doc1.DocumentNode.SelectSingleNode("//div/span[@itemprop='addressLocality']").InnerText; 
     var wojewodztwo = doc1.DocumentNode.SelectSingleNode("//div/span[@itemprop='addressRegion']").InnerText; 
     var telefon = doc1.DocumentNode.SelectNodes("//div[@class='divSMV_tel1 clearBoth']"); 
     List<string> lista_tel = new List<string>(); 
     foreach (var node in telefon) 
     { 
      lista_tel.Add(node.InnerText); 
     } 

     MessageBox.Show("nazwa " + nazwa 
         + "\nkod pocztowy " + kod_pocztowy 
         + "\nulica " + ulica 
         + "\nkod pocztowy " + kod_pocztowy 
         + "\nmiejscowość " + miejscowość 
         + "\nwojewództwo " + wojewodztwo 
         + "\ntelefon " + lista_tel[0].ToString()); 

以前工作过的现在显示一个空白页。为什么不工作敏捷包?

+1

https://ericlippert.com/2014/03/05/how-to-debug-small-程序/请阅读并理解他在说什么。你需要尝试自己去调试它,开始让pecies出来,直到它再次运行,然后当它运行时,试着弄清楚为什么你最后拿出的东西破坏了它,如果你不能再回到这里问一个问题具体的问题是,当你把它放回原处时,你为什么会破坏代码。 –

回答

0

您的服务器返回404 - Not Found作为响应状态,但也返回您期望的html内容。

因此,通过改变代码下载一点点,你的解析代码工作...

string url = @"http://www.baza-firm.com.pl/?vm=zabrze&pg=2&b_szukaj=szukaj"; 
var doc1 = new HtmlAgilityPack.HtmlDocument(); 

using (var client = new HttpClient()) 
{ 
    var resp = await client.GetAsync(url); 
    MessageBox.Show(resp.StatusCode.ToString()); 
    var html = await resp.Content.ReadAsStringAsync(); 
    doc1.LoadHtml(html); 
} 


MessageBox.Show(doc1.DocumentNode.OuterHtml.ToString()); 
..... 
...... 
+0

谢谢。请解释程序现在如何工作 – dawid653

+0

@ dawid653当服务器返回错误代码时,web.Load似乎不读取内容。我只是使用httpClient的* GetAsync *方法,其行为有所不同。 –

+0

如何返回任务 class nowa { public async Task co() { ... return table; } private void button2_ClickAsync(object sender, EventArgs e) { nowa nw = new nowa(); Task wy = nw.co(); //MessageBox.Show(wy[0,0]); string a = wy[0, 0]; //error } dawid653