【问题标题】:WebScraper C# + htmlagilitypackWebScraper C# + htmlagilitypack
【发布时间】:2020-09-04 03:41:16
【问题描述】:

我开始开发应用程序。下载到数据库后,我需要从网站上获取一些信息,然后我需要处理这些信息。 好吧,我没有足够的经验,并感谢您的任何推荐。 例如 - 我将与体育网站合作。 (https://terrikon.com/football/spain/championship/) 我需要从表中接收信息并将这些数据下载到数据库中。 我尝试了一些下载数据的方法并理解了最好的方法——使用“htmlagilitypack”。 我阅读了有关使用此库的文档,并且做得最好:

using System;
using System.Xml;
using HtmlAgilityPack;

namespace Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            var html = @"https://terrikon.com/football/spain/championship/";

            HtmlWeb web = new HtmlWeb();

            var htmlDoc = web.Load(html);

            var node = htmlDoc.DocumentNode.SelectSingleNode("//head/title");

            var table = htmlDoc.QuerySelector("#champs-table > table");

            var tableRows = table.QuerySelectorAll("tr");

            foreach (var row in tableRows)
            {
                var team = row.QuerySelector(".team"); 
                var win = row.QuerySelector(".win");
                var draw = row.QuerySelector(".draw");
                var lose = row.QuerySelector(".lose");
                Console.WriteLine(team.OuterHtml );
            };

        }
    }
}

如果我要更改此字符串,我可以接收网站标题或所有信息

 var node = htmlDoc.DocumentNode.SelectSingleNode("//head");

您能给我建议如何仅从表格中获取信息吗? 感谢巡演关注

【问题讨论】:

    标签: c# asp.net parsing html-parsing html-agility-pack


    【解决方案1】:

    我建议还为 HtmlAgilityPack 安装一个 Css 选择器扩展,可以在这里找到:

    https://github.com/hcesar/HtmlAgilityPack.CssSelector

    您可以使用 css 选择器查询您的节点。 要从该表中获取信息,您必须知道它的 CSS 选择器。 在这种情况下:

    #champs-table > table

    所以要获得整张桌子,您可以这样做:

    var table = htmlDoc.QuerySelector("#champs-table > table");
    // then query rows of that table:
    
    var tableRows = table.QuerySelectorAll("tr");
    
    // Now each element it tableRows is a <tr> from that html table
    // you could access every value in a for each loop
    foreach(var row in tableRows)
    {
      var team = row.QuerySelector(".team"); // "team" is a css class applied to <td> containing the team name
      var win = row.QuerySelector(".win");
      var draw = row.QuerySelector(".draw");
    var lose = row.QuerySelector(".lose");
    
    }
    

    【讨论】:

    • 感谢您的帮助。我读到了 CSS 选择器,很好的链接!我了解您做了什么,但是当我尝试实现此代码时,“var table = doc.QuerySelector("#champs-table > table");" 行中有错误doc - 当前上下文中不存在。这是什么意思?
    • 你的dochtmlDoc,调整变量名即可。我更新了我的 sn-p
    • 嗯,我试过了。如果我做这个交换我有下一个问题:“'HTMLDocument'不包含'QuerySelector'的定义并且没有可访问的扩展方法'QuerySelector'接受'HTMLDocument'类型的第一个参数”正确理解我可以使用 2 种技术在这个库中工作:1)CSS 选择器 2)XPATH 并且对于这两种技术我不需要安装特殊包(NUGET)?
    • QuerySelector 是我链接的包中的扩展方法,您必须将其安装在您的项目中并导入命名空间才能使其工作
    • 对不起,还有一个问题。我没有下载数据的问题,但是当我从我的表中打印数据时我出了什么问题?我附上带有结果和命令的屏幕照片以进行打印。我做错了什么?
    猜你喜欢
    • 2012-12-10
    • 2016-06-18
    • 1970-01-01
    • 2022-08-23
    • 2022-01-20
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多