Usando htmlAgilityPack raschiando tutto il testo interno dal <a>tag</a>

.net c# html-agility-pack web-scraping xpath

Domanda

Voglio eliminare tutte le parole dal link http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1 Ho provato qualcosa del genere:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']//a");

if (nodes != null)
{

    foreach (HtmlNode n in nodes)
    {
         link = n.InnerText;
        my_link.Add(link);
        MessageBox.Show(link);
    }

}
else
    MessageBox.Show("no wordfound ");

Il mio output expexted dovrebbe piacere

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']//a");

if (nodes != null)
{

    foreach (HtmlNode n in nodes)
    {
         link = n.InnerText;
        my_link.Add(link);
        MessageBox.Show(link);
    }

}
else
    MessageBox.Show("no wordfound ");

Ma non ha funzionato ?? Mostra "nessuna parola trovata" Significa che restituisce null. Come posso ottenere tutto il testo dal tag <a> in quel caso ??? Qualcuno può dirmi cosa dovrebbe essere in SelectNodes ("") ???

Risposta accettata

Devi cercare il prossimo nodo di testo dopo il tag <script> (non tag <a> come hai detto tu), all'interno di <font class='search-index-font'> . Questa espressione xpath farà il trucco:

//font[@class='search-index-font']/script/following-sibling::text()[1]

E questo codice:

//font[@class='search-index-font']/script/following-sibling::text()[1]

restituirà i nodi di testo che ti servono:

//font[@class='search-index-font']/script/following-sibling::text()[1]

Risposta popolare

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc =
    web.Load("http://search.freefind.com/siteindex.html?id=59478474&ltr=10240&fwr=0&pid=i&ics=1");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//font[@class='search-index-font']");
string link = string.Empty;
if (nodes != null)
{
    foreach (var item in nodes)
    {
        var value =
        item.Elements("script").ToList();
        foreach (var items in value)
        {
            link += items.NextSibling.InnerText+ "\n";
        }
    }
    MessageBox.Show(link);
}
else
    MessageBox.Show("no wordfound ");



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é