HtmlAgilityPack scraping: estrazione di nodi specifici dal documento html

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

Domanda

Mi scuso in anticipo se questo è già stato risposto (in tal caso, per favore, indicami la giusta posizione), ho cercato qui, web, youtube e così via per due giorni e ancora non ho trovato una risposta.

Vorrei estrarre alcuni dati dal seguente URL: https://betcity.ru/en/results/sp_fl=a:46 ;

Sto cercando di ottenere tutti i nomi degli eventi per il giorno (il primo è: Ho Kwan Kit / Wong Chun Ting - Fan Zhendong / Xu Xin e tutti gli altri dopo di esso). Quando ispeziono quell'elemento posso vedere questa parte di html:

<div class="content-results-data__event"><span>Ho Kwan Kit/Wong Chun Ting — Fan Zhendong/Xu Xin</span></div>

Stavo pensando di ottenere tutte le div con class = "content-results-data__event" e di ottenere il testo interno da quelle div. Ogni volta che eseguo il mio codice ottengo zero risultati. Perché non ottengo alcun nodo quando posso vedere che esistono div con tale classe e come posso ottenere tutti gli eventi (se imparo come farlo potrei ottenere altre informazioni di cui ho bisogno da questo sito). Ecco il mio codice (devo dire che sono abbastanza nuovo a questo).

public partial class Scrapper : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<string> Events = new List<string>();
        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = NewMethod(web);
        var Nodes = doc.DocumentNode.SelectNodes(xpath: "//div[@class='content - results - data__event'']").ToList();

        foreach (var item in Nodes)
        {
            Events.Add(item.InnerText);
        }

        GridView1.DataSource = Events;
        GridView1.DataBind();


    }

    private static HtmlDocument NewMethod(HtmlAgilityPack.HtmlWeb web)
    {
        return web.Load("https://betcity.ru/en/results/sp_fl=a:46;");
    }
}

}

Risposta accettata

Ecco come ottenere l'HTML per un giorno di partite usando Selenium. Rest è HtmlAgilityPack. Il sito utilizza certificati autofirmati quindi ho dovuto configurare il driver per accettare i certificati autofirmati. Divertiti.

        var ffOptions = new FirefoxOptions();
        ffOptions.BrowserExecutableLocation = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
        ffOptions.LogLevel = FirefoxDriverLogLevel.Default;
        ffOptions.Profile = new FirefoxProfile { AcceptUntrustedCertificates = true };
        var service = FirefoxDriverService.CreateDefaultService();
       var driver = new FirefoxDriver(service, ffOptions, TimeSpan.FromSeconds(120));

        string url = "https://betcity.ru/en/results/date=2017-11-19;"; //remember to update the date accordingly.

        driver.Navigate().GoToUrl(url);
        Thread.Sleep(2000);
        Console.Write(driver.PageSource);


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é