c# - 从 html 敏捷包中过滤字符串
问题描述
我从 URL 中获取 html,然后选择元素table
并选择其中包含其属性值的所有tr
元素。现在我有 20 个左右这样的元素:table
tr
id
<th class="nw">1 Jan</th><td class="nw">Friday</td><td><a href="/holidays/andorra/new-year-day">New Year's Day</a></td><td>National holiday</td>
如何从上面的元素中分别获取每个文本?
示例输出:1 Jan/Friday/New Year's Day/National holiday
var url = "https://www.timeanddate.com/holidays/andorra/";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.5");
var html = await client.GetStringAsync(url);
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);
var a1 = document.DocumentNode.Descendants("table")
.Where(node => node.GetAttributeValue("id","").Equals("holidays-table"))
.ToList();
var a2 = a1[0].Descendants("tr")
.Where(node => node.GetAttributeValue("id","").Contains("tr"))
.ToList();
解决方案
这应该给你你想要的:
List<List<string>> holidays = document
.DocumentNode
.SelectNodes("//table[@id='holidays-table']/tbody/tr")
.Select(tr => tr.ChildNodes
.Where(n => n.Name == "th" || n.Name == "td")
.Select(n => n.InnerText.Trim())
.ToList())
.Where(row => row.Any()) // filter out empty rows
.ToList();
foreach (var row in holidays)
{
Console.WriteLine(string.Join(", ", row));
}
在这里工作演示:https ://dotnetfiddle.net/0SADls
推荐阅读
- python - 如何通过 Wappalyzer 浏览器插件使用 Selenium
- powershell - PowerShell 命令无法解析字符串文字并找到未知的位置参数
- django - Django Rest Framework 不输出过滤的查询集
- azure - 在具有外部访问权限的 Azure VM 中预配 SQL Always on
- javascript - 使用 MySQL 表达 JS REST API
- cypher - 我可以将 ANSI SQL 用于 AgensGraph 中的图形数据吗?
- python - 具有重复的有序节点和/或边的 Python Networkx 或 igraph DAG
- c - putchar(ch + 1) 没有立即放入 char
- html - 如何在 div 标签 I 中居中我的文本,为什么它在单词 an 和极端之间有一个空格?
- excel - 查找包含 ICD-10 代码的数据行的疯狂嵌套 Excel(或 VBA)语句