2017-01-31 2 views
0

Я пытаюсь получить innerText класса. Это мой код:HTMLAgilityPack get class innerText

using (HttpClient clientduplicate = new HttpClient()) 
{ 
    clientduplicate.DefaultRequestHeaders.Add("User-Agent", 
     "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 

    using (HttpResponseMessage responseduplicate = await clientduplicate.GetAsync(@"https://www.investing.com/news/stock-market-news/warren-buffett:-i-bought-$12-billion-of-stock-after-trump-won-456954") 
    using (HttpContent contentduplicate = responseduplicate.Content) 
    { 
     try 
     { 
      string resultduplicate = await contentduplicate.ReadAsStringAsync(); 

      var websiteduplicate = new HtmlDocument(); 
      websiteduplicate.LoadHtml(resultduplicate); 

      var titlesduplicate = websiteduplicate.DocumentNode.Descendants("div").FirstOrDefault(o => o.GetAttributeValue("class", "") == "arial_14 clear WYSIWYG newsPage"); 
      var match = Regex.Match(titlesduplicate.InnerText, @"(.*?)<!--", RegexOptions.Singleline).Groups[1].Value; 

      Debug.WriteLine(match.TrimStart()); 
     } 
     catch(Exception ex1) 
     { 
      var dialog2 = new MessageDialog(ex1.Message); 
      await dialog2.ShowAsync(); 
     } 
    } 
} 

Теперь проблема заключается в том, что это также будет возвращать мне текст на картинке. Я могу найти обходной путь, но мне было интересно, есть ли другой подход к этому. Что-то более простое/быстрое.

Плюс, когда я использую это в других статьях/URL-адресах, есть и другие незначительные ошибки.

+1

Вы можете очистить свой узел с XPATH запроса, как это 'titlesduplicate.SelectNodes ("./ IMG") ?. ToList() ForEach (я => i.Remove()); 'И для выбора titlesduplicate используйте' var titlesduplicate = websiteduplicate.DocumentNode.SelectSingleNode ("// div [contains (@class, 'newsPage')]"); ' – Kalten

+0

Можете ли вы подробнее рассказать о том, что ошибки? – GantTheWanderer

+0

@GantTheWanderer - алфавитные кодировки, буквы, измененные на html. Незначительные вещи. –

ответ

2

Существует много способов сделать это. Один из способов заключается в удалении карусельного DIV перед тем, как InnerText:. doc.DocumentNode.Descendants("div").FirstOrDefault(_ => _.Id.Equals("imgCarousel"))?.Remove();

+0

Это вызовет 'System.NullReferenceException', если' imgCarousel' не существует. Я исправил его, но отредактировал ваш ответ, чтобы я мог его принять. –

+0

Я вижу. Я добавил '?' Для проверки нулевой ссылки. Надеюсь, вы знаете этот синтаксис C# 6. –

+0

Я делаю, спасибо. –