Ottieni il valore tra i tag html Xpath e HtmlAgility

c# html html-agility-pack html-parsing xpath

Domanda

Finora sto cercando di recuperare il testo tra tag HTML per un determinato sito web ....

Per esempio, ho bisogno di estrarre il testo tra questi tag span come potrei fare, sto ricevendo un errore che dice "il riferimento all'oggetto non impostato su un'istanza di un oggetto" qui è l'HTML

C'è anche il codice HTML prima di questa parte qui; Non so se questo dovrebbe fare la differenza.

<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>

Finora il mio codice C # è

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

Posso avere qualche aiuto qui, voglio estrarre "The Blaster Portable Wireless Speaker in Black". Qualsiasi aiuto sarà utile, grazie in anticipo.

Risposta accettata

Il tuo codice funziona bene, ma dovrai caricare la pagina giusta per farlo funzionare. La pagina che stai caricando utilizza una richiesta Ajax per caricare i risultati che vedi nel tuo browser.

Quindi, al posto dell'URL che stai usando, devi usare:

HtmlDocument htmlDoc = hw.Load(@"http://www.karmaloop.com/Browse?Pgroup=1&ajax=true&version=2");

Quindi il tuo codice funziona. Sto ancora cercando il luogo in cui questa richiesta viene messa insieme ...

Ma la query sembra abbastanza facile da indovinare. Ad esempio, la pagina http://www.karmaloop.com/Browse.htm#Pdept=11&PageSize=30&Pgroup=1 richiede l'URL http://www.karmaloop.com/Browse?Pdept=11&PageSize=30&Pgroup=1&ajax=true&version=2 . Quindi tutto ciò che devi fare è usare il tuo url e crearne uno nuovo iniziando dopo il # .


Risposta popolare

Mi consiglia di utilizzare CsQuery ( https://www.nuget.org/packages/CsQuery/1.3.4 ) e quindi è semplice come:

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);


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché