C# 如何通过HttpWebResponse获取请求网页的标题
C# 基于HttpWebRequest获取网页标题的实现方案
你现有代码已经拿到了HttpWebResponse对象,接下来只需要读取响应的HTML内容,再提取<title>标签即可,具体实现如下:
完整代码示例(无第三方依赖)
HttpWebResponse response = null; var request = System.Net.HttpWebRequest.Create(websiteName); try { response = (HttpWebResponse)request.GetResponse(); } catch (WebException web) { response = (HttpWebResponse)web.Response; } string html = string.Empty; string pageTitle = string.Empty; if (response != null) { // 处理编码,避免中文乱码 Encoding encoding = Encoding.UTF8; if (!string.IsNullOrEmpty(response.CharacterSet)) { try { encoding = Encoding.GetEncoding(response.CharacterSet); } catch { // 编码获取失败时 fallback 到UTF8 encoding = Encoding.UTF8; } } // 读取响应流得到HTML内容 using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream, encoding)) { html = reader.ReadToEnd(); } response.Close(); // 正则匹配<title>标签内容 var titleMatch = System.Text.RegularExpressions.Regex.Match(html, @"<title>\s*(.+?)\s*</title>", RegexOptions.IgnoreCase); if (titleMatch.Success) { pageTitle = titleMatch.Groups[1].Value.Trim(); } } // 此时pageTitle变量就是提取到的网页标题
更稳定的实现方案(推荐应对复杂HTML场景)
如果业务场景中会遇到大量HTML写法不规范的页面,正则可能出现匹配失败的情况,推荐使用第三方HTML解析库处理,例如常用的HtmlAgilityPack,使用方法如下:
- 首先通过NuGet安装
HtmlAgilityPack包 - 替换上述正则匹配部分的代码即可:
var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); var titleNode = htmlDoc.DocumentNode.SelectSingleNode("//title"); if (titleNode != null) { pageTitle = titleNode.InnerText.Trim(); }
注意事项
- 正则匹配仅适合规范的HTML场景,遇到标签嵌套错误、大小写混杂、注释中包含title标签等情况会出错,生产环境推荐使用HTML解析库
- 编码处理是必须步骤,国内很多站点使用GBK/GB2312编码,直接用UTF8读取会出现中文乱码
内容的提问来源于stack exchange,提问作者newbieperson
相关产品推荐
相关产品推荐

