在网页开发和数据处理的场景中,经常需要从 HTML 文档里提取有用的信息。C# 作为一门强大的编程语言,提供了丰富的工具和库来实现 HTML 的解析。这篇博客就带你深入了解如何使用 C# 高效地解析 HTML。
在实际项目中,无论是进行网页数据采集、网页内容分析,还是开发网页爬虫,都离不开对 HTML 的解析。例如,电商平台可能需要从竞品网站上采集商品价格和库存信息;新闻聚合应用可能需要从各大新闻网站提取文章标题、正文和发布时间。通过 C# 解析 HTML,能够自动化地获取这些关键数据,大大提高工作效率。
using HtmlAgilityPack;
class Program
{
static void Main()
{
string html = "Example Link";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//a");
if (links!= null)
{
foreach (HtmlNode link in links)
{
string href = link.GetAttributeValue("href", "");
Console.WriteLine($"Link: {href}");
}
}
}
}
在这段代码中,首先创建了一个HtmlDocument对象并加载 HTML 字符串。然后使用SelectNodes方法结合 XPath 表达式//a来选取所有的标签节点,最后遍历这些节点并提取href属性的值。
Product 1
$19.99
使用 HtmlAgilityPack 提取数据的代码如下:
using HtmlAgilityPack;
class Product
{
public string Name { get; set; }
public string Price { get; set; }
public string ImageUrl { get; set; }
}
class Program
{
static void Main()
{
string html = "
Product 1
$19.99";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode productNode = doc.DocumentNode.SelectSingleNode("//div[@class='product']");
if (productNode!= null)
{
Product product = new Product();
HtmlNode imgNode = productNode.SelectSingleNode(".//img");
if (imgNode!= null)
{
product.ImageUrl = imgNode.GetAttributeValue("src", "");
}
HtmlNode nameNode = productNode.SelectSingleNode(".//h2[@class='product-name']");
if (nameNode!= null)
{
product.Name = nameNode.InnerText;
}
HtmlNode priceNode = productNode.SelectSingleNode(".//span[@class='price']");
if (priceNode!= null)
{
product.Price = priceNode.InnerText;
}
Console.WriteLine($"Name: {product.Name}, Price: {product.Price}, ImageUrl: {product.ImageUrl}");
}
}
}
这里使用SelectSingleNode方法结合 XPath 表达式来精确选取需要的节点,并提取相应的属性和文本内容。
using AngleSharp;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string html = "Example Link";
var context = BrowsingContext.New();
var document = await context.OpenAsync(req => req.Content(html));
var links = document.QuerySelectorAll("a");
foreach (var link in links)
{
string href = link.GetAttribute("href");
Console.WriteLine($"Link: {href}");
}
}
}
在这段代码中,通过BrowsingContext.New()创建一个浏览上下文,然后使用OpenAsync方法加载 HTML 字符串并得到一个IDocument对象。接着使用QuerySelectorAll方法结合 CSS 选择器来选取所有的标签,最后提取href属性。
通过上述示例,我们可以看到 C# 在解析 HTML 方面有强大的工具支持。在实际应用中,需要注意以下几点:
希望这篇博客能帮助你掌握 C# 解析 HTML 的技巧,在实际项目中高效地处理网页数据。如果在实践过程中有任何问题,欢迎在评论区留言交流。