HtmlAgilityPack抓取 - 从html文档

时间:2017-11-19 22:45:07

标签: c# html xpath web-scraping html-agility-pack

如果已经回答了问题,请提前道歉(如果是这样,请指向正确的位置),我在这里搜索,网络,youtube等两天仍然没有找到答案。

我想从以下网址中提取一些数据:https://betcity.ru/en/results/sp_fl=a:46;

我正在尝试获取当天的所有活动名称(第一个是: Ho Kwan Kit / Wong Chun Ting - 范振东/许昕和其他所有人之后)。当我检查那个元素时,我可以看到html的这一部分:

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

我正在考虑使用class =“content-results-data__event”来获取所有div,而不是从这些div中获取内部文本。每次运行我的代码时,我都得到零结果。当我看到有这样的类的div存在时,为什么我没有得到任何节点?如何获得所有事件(如果我学会了如何做到这一点,我可以从这个站点获得我需要的其他信息)。这是我的代码(不得不说我对此很新)。

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

}

1 个答案:

答案 0 :(得分:0)

以下是如何使用Selenium获取一天匹配的HTML。休息是HtmlAgilityPack。该站点使用自签名证书,因此我必须配置驱动程序以接受自签名证书。玩得开心。

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