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

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

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

Прошу помощи. Вот код:
using System;
using System.Linq;
using HtmlAgilityPack;
 
namespace ConsoleApplication2
{
    class Program
    {
        private static void Main()
        {
            var doc = new HtmlWeb();
            var htmlDoc = doc.Load("http://espn.go.com/nba/playbyplay?gameId=400828818", "GET");
            //Список всех строк
            var docNodes = htmlDoc.DocumentNode.SelectNodes(".//*[@id='gp-quarter-1']/table/tbody/tr");
            //Теперь для каждой строки tr, получаем все столбцы td
            foreach (var tr in docNodes)
            {
                //Получаем список столбцов i-ой строки
                var tdList = tr.ChildNodes.Where(x => x.Name == "td");
                foreach (var td in tdList)
                {
                    Console.WriteLine(td.InnerText);
                }
            }
            Console.ReadKey();
        }
    }
}
Хочу вытащить с соответствующей страницы время и счет матча, которые забиты в таблицу. Сама страница скачивается нормально. XPath в норме похоже. Ошибка Необработанное исключение типа "System.NullReferenceException" возникает здесь в docNodes.
foreach (var tr in docNodes)
Причем, если отдельно на html странице оставить практически только саму таблицу и парсить только ее, то все как бы ок. Но мне очень желательно, чтобы не морочиться таким образом.

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

textual
Листинг программы
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
 
namespace GetTimeAndScore
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            textBoxOutput.ScrollBars = ScrollBars.Both;
            textBoxOutput.WordWrap = false;
        }
 
        private async void buttonGetTimeAndScore_Click(object sender, EventArgs e)
        {
            buttonGetTimeAndScore.Enabled = false;
            await GetTimeAndScore();
            buttonGetTimeAndScore.Enabled = true;
        }
 
        private async Task GetTimeAndScore()
        {
            using (var client = new HttpClient())
            {
                var htmlResp = await client.GetStringAsync("http://espn.go.com/nba/playbyplay?gameId=400828818");
                
                HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
                htmlDoc.LoadHtml(htmlResp);
                
                if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
                {
                    // Handle any parse errors as required
                    MessageBox.Show("Parse error detected.");
                }
                else
                {
                    if (htmlDoc.DocumentNode != null)
                    {
                        var docNodes = htmlDoc.GetElementbyId("gp-quarter-1").SelectNodes("table/tr");
 
                        foreach (var tr in docNodes)
                        {
                            var tdList = tr.ChildNodes.Where(x => x.Name == "td");
                            foreach (var td in tdList)
                            {
                                textBoxOutput.Text += td.InnerText;
                                textBoxOutput.Text += Environment.NewLine;
                            }
                        }
                    }
                }
                
            }
        }
    }
}

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


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

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

15   голосов , оценка 4.267 из 5
Похожие ответы