提问人:Кирилл Филободченко 提问时间:5/18/2020 最后编辑:DisappointedByUnaccountableModКирилл Филободченко 更新时间:2/6/2021 访问量:185
WebScraper C# + htmlagilitypack
WebScraper C# + htmlagilitypack
问:
我开始开发应用程序。在数据库中下载后,我需要从网站上获取一些信息,然后我需要处理这些信息。 好吧,我没有足够的经验,非常感谢您的任何建议。 例如 - 我将与体育网站合作。(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");
答:
1赞
Jakub Kozera
5/18/2020
#1
我还建议安装一个 Css 选择器扩展,可以在这里找到:HtmlAgilityPack
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");
}
评论
0赞
Кирилл Филободченко
5/18/2020
感谢您的帮助。我读了CSS选择器,很好的链接!我明白你做了什么,但是当我尝试实现这段代码时,我在“ var table = doc 行中出现错误。QuerySelector(“#champs-table > table”);“ doc - 在当前上下文中不存在。这是什么意思?
0赞
Jakub Kozera
5/18/2020
你的调用,只需调整变量名称即可。我更新了我的代码段doc
htmlDoc
0赞
Кирилл Филободченко
5/18/2020
嗯,我试过了。如果我进行此交换,我会遇到下一个问题:“'HTMLDocument'不包含'QuerySelector'的定义,并且找不到可访问的扩展方法'QuerySelector'接受'HTMLDocument'类型的第一个参数” 正确理解我可以使用 2 种技术在这个库中工作:1)CSS 选择器 2)XPATH,对于这两种技术,我不需要安装特殊包 (NUGET)?
0赞
Jakub Kozera
5/18/2020
QuerySelector
是我链接的包中的扩展方法,您必须将其安装在项目中并导入命名空间才能使其正常工作
0赞
Кирилл Филободченко
5/18/2020
对不起,还有一个问题。我的下载数据没有问题,但是当我从表中打印数据时,我有什么问题?我附上带有结果和命令打印的屏幕照片。我做错了什么?
评论