并发抓取网页H1标题大揭秘!C#打造高效信息提取工具!

并发抓取网页H1标题大揭秘!C#打造高效信息提取工具!

首页卡牌对战代号领域更新时间:2024-04-24

如果你有一个包含多个网址的列表,需要快速收集每个网页上的H1标题。快速、准确地从海量网页中提取关键信息。今天这个代码就太有用了!

实现的关键:

定义了一个URL列表,并初始化一个ConcurrentBag对象用于存储H1标题。 利用HttpClient发送异步HTTP请求,并通过Task.WhenAll方法并发处理所有网址。 在抓取过程中,如果遇到网络异常,程序会自动尝试最多三次重新获取, 每次重试之间加入递增延迟以避免过频请求导致的问题。 它使用了HTMLAgilityPack库来解析HTML, System.Collections.Concurrent库中的ConcurrentBag来存储H1标题, 以及System.Net.Http库中的HttpClient来发送HTTP请求。

核心代码部分包括两个方法:

FetchH1HeadingsAsync负责单个URL的异步抓取,若出现异常则进行重试; 这是一个异步方法,用于抓取单个URL的H1标题。 方法接受一个URL、一个HttpClient实例和一个ConcurrentBag作为参数。 该方法尝试最多三次抓取H1标题。如果第一次尝试失败, 它会等待一段时间(根据尝试次数递增)然后重试。 如果三次尝试都失败,它会输出一条错误消息。 在每次尝试中,它使用HttpClient发送GET请求以获取URL的内容, 然后调用ProcessHTMLContent方法解析HTML并提取H1标题。 // 异步方法,用于获取单个URL的H1标题,支持重试机制 static async Task FetchH1HeadingsAsync(string url, HttpClient client, ConcurrentBag<string> headings) { for (int attempt = 1; attempt <= 3; attempt ) // 最多尝试3次抓取 { try { string htmlContent = await client.GetStringAsync(url); ProcessHtmlContent(htmlContent, headings); // 解析HTML并添加标题 return; } catch (HttpRequestException) when (attempt < 3) { await Task.Delay(TimeSpan.FromSeconds(attempt * 2)); // 每次失败后增加延时再重试 } } Console.WriteLine($"尝试三次后仍无法从{url}获取内容。"); } ProcessHtmlContent将接收到的HTML内容解析成HtmlDocument对象, 并从中提取所有H1标签对应的文本内容作为标题。 // 解析HTML内容并提取所有H1标题,存入线程安全集合 static void ProcessHtmlContent(string htmlContent, ConcurrentBag<string> headings) { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlContent); foreach (var node in doc.DocumentNode.SelectNodes("//h1")) { if (node != null) { headings.Add(node.InnerText.Trim()); // 添加标题前去除空白字符 } } }

这个案例演示的技术方案具有很高的实用价值,在互联网信息采集、搜索引擎优化分析等领域可以发挥极为重要的作用。

通过高效的并发异步处理和线程安全数据结构,可以大大减少信息抓取的时间成本,并有优异的性能表现。

这是一个非常好的实现方式,H1也可以改成别的,效果杠杠的,需要完整代码或者编译成实用工具的可以关注留言给我。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved