.NET 4.x Не парсится страница. HtmlAgilityPack. SelectNodes - C#
Формулировка задачи:
Прошу помощи. Вот код:
Хочу вытащить с соответствующей страницы время и счет матча, которые забиты в таблицу. Сама страница скачивается нормально. XPath в норме похоже. Ошибка Необработанное исключение типа "System.NullReferenceException" возникает здесь в docNodes.
Причем, если отдельно на html странице оставить практически только саму таблицу и парсить только ее, то все как бы ок. Но мне очень желательно, чтобы не морочиться таким образом.
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(); } } }
foreach (var tr in docNodes)
Решение задачи: «.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; } } } } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д