asp.net 利用HttpWebRequest自动获取网页编码并获取网页源代码

2024-03-17 13:18

本文主要是介绍asp.net 利用HttpWebRequest自动获取网页编码并获取网页源代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     /// <summary>/// 获取源代码/// </summary>/// <param name="url"></param>/// <returns></returns>public static string GetHtml(string url, Encoding encoding){HttpWebRequest request = null;HttpWebResponse response = null;StreamReader reader = null;try{request = (HttpWebRequest)WebRequest.Create(url);request.Timeout = 20000;request.AllowAutoRedirect = false;response = (HttpWebResponse)request.GetResponse();if (response.StatusCode == HttpStatusCode.OK && response.ContentLength < 1024 * 1024){if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress), encoding);elsereader = new StreamReader(response.GetResponseStream(), encoding);string html = reader.ReadToEnd();return html;}}catch{}finally{if (response != null){response.Close();response = null;}if (reader != null)reader.Close();if (request != null)request = null;}return string.Empty;}
    public static string GetEncoding(string url){HttpWebRequest request = null;HttpWebResponse response = null;StreamReader reader = null;try{request = (HttpWebRequest)WebRequest.Create(url);request.Timeout = 20000;request.AllowAutoRedirect = false;response = (HttpWebResponse)request.GetResponse();if (response.StatusCode == HttpStatusCode.OK && response.ContentLength < 1024 * 1024){if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));elsereader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);string html = reader.ReadToEnd();Regex reg_charset = new Regex(@"charset\b\s*=\s*(?<charset>[^""]*)");if (reg_charset.IsMatch(html)){return reg_charset.Match(html).Groups["charset"].Value;}else if (response.CharacterSet != string.Empty){return response.CharacterSet;}elsereturn Encoding.Default.BodyName;}}catch{}finally{if (response != null){response.Close();response = null;}if (reader != null)reader.Close();if (request != null)request = null;}}



下面是获取网页标题的

 using System; using System.Net; using System.Text; using System.Text.RegularExpressions; class Program { // 获取网页的HTML内容,根据网页的charset自动判断Encoding static string GetHtml(string url) { return GetHtml(url, null); } // 获取网页的HTML内容,指定Encoding static string GetHtml(string url, Encoding encoding) { byte[] buf = new WebClient().DownloadData(url); if (encoding != null) return encoding.GetString(buf); string html = Encoding.UTF8.GetString(buf); encoding = GetEncoding(html); if (encoding == null || encoding == Encoding.UTF8) return html; return encoding.GetString(buf); } // 根据网页的HTML内容提取网页的Encoding static Encoding GetEncoding(string html) { string pattern = @"(?i)\bcharset=(? <charset>[-a-zA-Z_0-9]+)"; string charset = Regex.Match(html, pattern).Groups["charset"].Value; try { return Encoding.GetEncoding(charset); } catch (ArgumentException) { return null; } } // 根据网页的HTML内容提取网页的Title static string GetTitle(string html) { string pattern = @"(?si) <title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(? <title>.*?) </title>"; return Regex.Match(html, pattern).Groups["title"].Value.Trim(); } // 打印网页的Encoding和Title static void PrintEncodingAndTitle(string url) { string html = GetHtml(url); Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html)); } // 程序入口 static void Main() { PrintEncodingAndTitle("http://www.msdn.net/"); PrintEncodingAndTitle("http://www.cnblogs.com/"); PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/"); PrintEncodingAndTitle("http://www.csdn.net/"); PrintEncodingAndTitle("http://news.163.com/"); } } /* 程序输出: [] [MSDN: Microsoft Developer Network] [System.Text.UTF8Encoding] [博客园 - 程序员的网上家园] [System.Text.UTF8Encoding] [空间/IV - 博客园] [System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台] [System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻] */




这篇关于asp.net 利用HttpWebRequest自动获取网页编码并获取网页源代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819072

相关文章

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav