.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;
}
}
}
}
}
}
}
}