2.27抓取网页内容(爬虫)

借助 HTTP 远程请求模块,您可以轻松抓取互联网上的任意网页内容(即常说的“爬虫”)。配合 HTML 解析库(如 AngleSharp 或 HtmlAgilityPack),可进一步提取所需数据。

借助 HTTP 远程请求模块,您可以轻松抓取互联网上的任意网页内容(即常说的“爬虫”)。配合 HTML 解析库(如 AngleSharpHtmlAgilityPack),可进一步提取所需数据。

以下以抓取博客园(cnblogs)首页的博客标题为例,分别展示两种解析库的使用方式。

使用 AngleSharp#

1. 安装 NuGet 包

bash
Install-Package AngleSharp

2. 编写爬取代码

cs
// 获取博客园首页 HTML 字符串var cnblogs = await httpRemoteService.SendAsStringAsync(HttpRequestBuilder.Get("https://www.cnblogs.com/")     .SetUserAgent(UserAgents.GetRandom())); // 随机浏览器 User-Agent// 使用默认配置创建一个用于解析网页的上下文var context = BrowsingContext.New(Configuration.Default);// 将获取到的 HTML 字符串作为虚拟请求的内容,解析为可操作的文档对象var document = await context.OpenAsync(req => req.Content(cnblogs));// 使用 CSS 选择器查询文档中所有匹配的元素:id 为 post_list 下的 post-item-title 类元素var elements = document.QuerySelectorAll("#post_list .post-item-title");// 提取每个元素的文本内容(即博客标题)var titles = elements.Select(u => u.TextContent).ToList();

使用 HtmlAgilityPack#

1. 安装 NuGet 包

bash
Install-Package HtmlAgilityPack

2. 编写爬取代码

cs
// 获取博客园首页 HTML 字符串var cnblogs = await httpRemoteService.SendAsStringAsync(HttpRequestBuilder.Get("https://www.cnblogs.com/")     .SetUserAgent(UserAgents.GetRandom())); // 随机浏览器 User-Agent// 创建 HtmlDocument 实例,用于解析 HTMLvar document = new HtmlDocument();// 加载获取到的 HTML 字符串document.LoadHtml(cnblogs);// 使用 XPath 获取节点集合:选择 id 为 post_list 的元素内,所有 class 包含 post-item-title 的子元素var nodes = document.DocumentNode.SelectNodes("//*[@id='post_list']//*[contains(@class,'post-item-title')]");// 提取每个节点的内部文本(即博客标题)var titles =  nodes.Select(node => node.InnerText).ToList();

注意事项#

  • 合法合规:请务必遵守目标网站的 robots.txt 协议及相关法律法规,合理控制请求频率,避免对服务器造成压力。
  • 反爬策略:可适当设置 User-Agent、延时等待、代理 IP 等策略,以提高抓取稳定性。
  • 解析方式AngleSharp 支持 CSS 选择器,语法更接近前端;HtmlAgilityPack 则基于 XPath,两者各有所长,可按需选用。

通过 HTTP 远程请求与解析库的结合,您可以快速实现各类网页数据采集需求。