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

a    
aa
aachhe
aagrashi
aagun
aaj
aam
aanka
aankhi
aar
aashman
abāddhō
abāddhōtā
abadh
..
..

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:

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']/script/following-sibling::text()[1]");

restituirà i nodi di testo che ti servono:

a
aa
aachhe
aagrashi
aagun
aaj
aam
aanka
aankhi
aar
...

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é