【问题标题】:HtmlAgilityPack scraping - extracting specific nodes from html documentHtmlAgilityPack 抓取 - 从 html 文档中提取特定节点
【发布时间】:2018-05-03 03:06:20
【问题描述】:

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

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

我正在尝试获取当天的所有活动名称(第一个是: 何君杰/王俊廷——范振东/许昕等人)。当我检查该元素时,我可以看到 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;");
    }
}

}

【问题讨论】:

  • 您能否具体说明您要抓取的数据。最好是整个 xpath。其次,要抓取一个通过脚本更新内容的网站并不容易。在这种情况下,我更喜欢使用 Selenium。第三 - 无论您使用什么方法来抓取数据,它都会很慢,特别是如果您打算计算容易发生变化的几率。如果网站甚至提供 API,我建议您找到它。
  • 我试图获取当天所有匹配项的列表。第一个是我写的,第二个是 Gerassimenko Kirill — Achanta Sharath Kamal 等等。我的最终目标是创建包含所有事件、分数等的个人数据库。如果有任何计算执行的数据将从 sql DB 中提取。考虑到我的编码技能,看起来我现在咬得比我能咀嚼的还多。感谢您的回复。
  • 这很可能超出了大多数人的技能范围。首先 - 使用 Charles 或 Fiddler 不会产生页面上显示的数据。您可以看到 Web 请求和结果页面。然而,页面上的数据是通过非常密集的 javascripts 文件更新的。我建议您使用 Selenium 和 Selenium 等无头驱动程序来获取页面上的 HTML。 Check out this answer

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


【解决方案1】:

这里是如何使用 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);

【讨论】:

  • 谢谢。在你的帮助下,我确实取得了一些进展。会看到我能看到它到底。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多