首页 > 解决方案 > HTML 敏捷包忽略
标签

问题描述

我在 C# 中编写了以下代码来检索网页中表格的内容(在获得许可后)。它工作得几乎完美,但一些单元格包含多个像这样的值

 _______
|   10  |
|   11  |
|   12  |
|___13__|

但我得到了价值10111213

这是一个链接,如果需要进一步清晰的视野,您可以查看表格代码:ttps://ug3.technion.ac.il/rishum/course/104031

WebClient webClient = new WebClient();
string page = webClient.DownloadString("https://ug3.technion.ac.il/rishum/course/104031");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);

List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@class='rishum-groups']")
            .Descendants("tr")
            .Skip(1)
            .Where(tr => tr.Elements("td").Count() > 1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
            .ToList();

标签: javascriptc#htmlweb-scrapinghtml-agility-pack

解决方案


InnerText属性将删除所有元素,只留下文本。如果要保留<br>元素,则应InnerHtml改为使用。这是一个例子:

var table = doc.DocumentNode.SelectSingleNode("//table[@class='rishum-groups']")
            .Descendants("tr")
            .Skip(1)
            .Where(tr => tr.Elements("td").Count() > 1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerHTML.Trim()).ToList())
            .ToList();

如果需要解析这些值,可以使用Split()字符串上的方法。这是一个例子:

var myValues = myTextField.Split(new string[] { "<br>" }, StringSplitOptions.None);

推荐阅读