Jusqu'à présent, j'essaie de récupérer le texte entre les balises HTML d'un certain site Web ....
Disons, par exemple, que je dois extraire le texte entre ces balises span.
Il y a aussi du code HTML avant cette partie ici; Je ne sais pas si cela devrait faire une différence.
<div class="thumbnail-details">
<ul>
<li> … </li>
<li class="product-title">
<span class="thumbnail-details-grey">The Blaster Portable Wireless Speaker in Black</span>
</li>
<li> … </li>
</ul>
</div>
Jusqu'à présent, mon code C # est
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDoc = hw.Load(@"http://www.karmaloop.com/Browse.htm#Pgroup=1");
if (htmlDoc.DocumentNode != null)
{
foreach (HtmlNode text in htmlDoc.DocumentNode.SelectNodes("//span[@class='thumbnail-details-grey']/text()"))
{
Console.WriteLine(text.InnerText);
}
Puis-je obtenir de l'aide ici, je veux extraire "Le haut-parleur sans fil portable Blaster en noir".
Votre code fonctionne très bien, mais vous devrez charger la bonne page pour le faire fonctionner. La page que vous chargez utilise une demande ajax pour charger les résultats que vous voyez dans votre navigateur.
Donc, au lieu de l'URL que vous utilisez actuellement, vous devez utiliser:
HtmlDocument htmlDoc = hw.Load(@"http://www.karmaloop.com/Browse?Pgroup=1&ajax=true&version=2");
Ensuite, votre code fonctionne. Je cherche toujours l'endroit où cette demande est mise en place ...
Mais la requête semble plutôt facile à deviner. Par exemple, la page http://www.karmaloop.com/Browse.htm#Pdept=11&PageSize=30&Pgroup=1
demander l'URL http://www.karmaloop.com/Browse?Pdept=11&PageSize=30&Pgroup=1&ajax=true&version=2
Donc, tout ce que vous avez à faire est d’utiliser votre URL et d’en construire une nouvelle en commençant après le #
.
Je recommanderais d'utiliser CsQuery ( https://www.nuget.org/packages/CsQuery/1.3.4 ) et ensuite c'est aussi simple que
var doc = CQ.CreateFromUrl(@"http://www.karmaloop.com/Browse.htm");
var nodes = doc.Find("span.thumbnail-details-grey");
foreach(var node in nodes)
Console.WriteLine(node.InnerText);