.NET 4.x Не парсится страница. HtmlAgilityPack. SelectNodes - C#

Узнай цену своей работы

Формулировка задачи:

Прошу помощи. Вот код:
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using HtmlAgilityPack;
  4. namespace ConsoleApplication2
  5. {
  6. class Program
  7. {
  8. private static void Main()
  9. {
  10. var doc = new HtmlWeb();
  11. var htmlDoc = doc.Load("http://espn.go.com/nba/playbyplay?gameId=400828818", "GET");
  12. //Список всех строк
  13. var docNodes = htmlDoc.DocumentNode.SelectNodes(".//*[@id='gp-quarter-1']/table/tbody/tr");
  14. //Теперь для каждой строки tr, получаем все столбцы td
  15. foreach (var tr in docNodes)
  16. {
  17. //Получаем список столбцов i-ой строки
  18. var tdList = tr.ChildNodes.Where(x => x.Name == "td");
  19. foreach (var td in tdList)
  20. {
  21. Console.WriteLine(td.InnerText);
  22. }
  23. }
  24. Console.ReadKey();
  25. }
  26. }
  27. }
Хочу вытащить с соответствующей страницы время и счет матча, которые забиты в таблицу. Сама страница скачивается нормально. XPath в норме похоже. Ошибка Необработанное исключение типа "System.NullReferenceException" возникает здесь в docNodes.
Листинг программы
  1. foreach (var tr in docNodes)
Причем, если отдельно на html странице оставить практически только саму таблицу и парсить только ее, то все как бы ок. Но мне очень желательно, чтобы не морочиться таким образом.

Решение задачи: «.NET 4.x Не парсится страница. HtmlAgilityPack. SelectNodes»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Windows.Forms;
  5. using System.Net.Http;
  6.  
  7. namespace GetTimeAndScore
  8. {
  9.     public partial class Form1 : Form
  10.     {
  11.         public Form1()
  12.         {
  13.             InitializeComponent();
  14.  
  15.             textBoxOutput.ScrollBars = ScrollBars.Both;
  16.             textBoxOutput.WordWrap = false;
  17.         }
  18.  
  19.         private async void buttonGetTimeAndScore_Click(object sender, EventArgs e)
  20.         {
  21.             buttonGetTimeAndScore.Enabled = false;
  22.             await GetTimeAndScore();
  23.             buttonGetTimeAndScore.Enabled = true;
  24.         }
  25.  
  26.         private async Task GetTimeAndScore()
  27.         {
  28.             using (var client = new HttpClient())
  29.             {
  30.                 var htmlResp = await client.GetStringAsync("http://espn.go.com/nba/playbyplay?gameId=400828818");
  31.                
  32.                 HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
  33.                 htmlDoc.LoadHtml(htmlResp);
  34.                
  35.                 if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
  36.                 {
  37.                     // Handle any parse errors as required
  38.                     MessageBox.Show("Parse error detected.");
  39.                 }
  40.                 else
  41.                 {
  42.                     if (htmlDoc.DocumentNode != null)
  43.                     {
  44.                         var docNodes = htmlDoc.GetElementbyId("gp-quarter-1").SelectNodes("table/tr");
  45.  
  46.                         foreach (var tr in docNodes)
  47.                         {
  48.                             var tdList = tr.ChildNodes.Where(x => x.Name == "td");
  49.                             foreach (var td in tdList)
  50.                             {
  51.                                 textBoxOutput.Text += td.InnerText;
  52.                                 textBoxOutput.Text += Environment.NewLine;
  53.                             }
  54.                         }
  55.                     }
  56.                 }
  57.                
  58.             }
  59.         }
  60.     }
  61. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы