2017-04-13 1 views
1

Je suis en train de gratter le contenu dans un div:Sélection du contenu div avec htmlagilitypack 'La valeur ne peut pas être nulle.'

<div itemprop="articleBody">random, unique content in this div, different each time</div> 

Mon code pour essayer d'obtenir le contenu entre le div ci-dessus

var html = "random url eachtime.com"; 
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 
var nodes = doc.DocumentNode.SelectNodes("div[@itemprop=\"articleBody\"]"); 
var inntertexts = nodes.Select(node => node.InnerText); 
articletext.Text = inntertexts.ToString(); 

Lorsque je visite la page Web pour gratter le contenu entre le div Je reçois ce qui suit

exception ... La valeur ne peut pas être nulle. Nom du paramètre: Source

J'ai essayé le chemin XPath comme si trop:

/html[1]/body[1]/div[3]/div[2]/div[3]/div[3]/div[5]/div[1]/div[1]/div[1] 

Je tente d'obtenir ArticleBody du lien suivant: Vue-source: http://www.dailymail.co.uk/sciencetech/article-4408856/Samsung-building-flip-phone-TWO-screens.html?ITO=1490&ns_mchannel=rss&ns_campaign=1490

Comment Je corrige ça pour que je puisse avoir le contenu de la div?

+2

vérifier la valeur de 'itemprop', vous avez un majuscule ** B ** –

+0

Ouais, je voulais ajouter à la div ... Edditted – 4334738290

Répondre

0

Il se peut que cette balise div soit à l'intérieur d'autres balises. Si oui, vous pouvez utiliser "//div[@itemprop=\"articleBody\"]"(barres obliques à l'avant de l'étiquette div).

class Program 
{ 
    static void Main(string[] args) => Task.Run(() => MainAsync(args)).Wait(); 

    static async Task MainAsync(string[] args) 
    { 
     var html = await GetResponseFromURI(new Uri("http://www.dailymail.co.uk/sciencetech/article-4408856/Samsung-building-flip-phone-TWO-screens.html?ITO=1490&ns_mchannel=rss&ns_campaign=1490")); 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     var nodes = doc.DocumentNode.SelectNodes("//div[@itemprop=\"articleBody\"]"); 
     if (nodes != null) 
     { 
      Console.WriteLine(nodes.Select(node => node.InnerText).FirstOrDefault()); 
     } 
     Console.ReadLine(); 
    } 

    static async Task<string> GetResponseFromURI(Uri uri) 
    { 
     var response = ""; 
     using (var client = new HttpClient()) 
     { 
      HttpResponseMessage result = await client.GetAsync(uri); 
      if (result.IsSuccessStatusCode) 
       response = await result.Content.ReadAsStringAsync(); 
     } 
     return response; 
    } 
} 

enter image description here

S'il n'y a pas div balise avec itemprop=\"articleBody\" du tout, vous devrez utiliser l'enregistrement nul.

+0

Toujours la même exception: exception ... La valeur ne peut pas être nulle. Nom du paramètre: source – 4334738290

+0

Le code ci-dessus fonctionne pour moi dans l'application console. Pourriez-vous me montrer l'entrée html? – Win

+0

Sure chose: vue-source: http: //www.dailymail.co.uk/sciencetech/article-4408856/Samsung-building-flip-phone-TWO-screens.html? ITO = 1490 & ns_mchannel = rss & ns_campaign = 1490 – 4334738290