代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Asp.Net
】
获取网页中的图片并显示出来
作者:
Dezai.CN
/ 发布于
2012/2/20
/
464
此类实现以下功能: 1、读取网页内容 2、读取网页中的图片,并出来图片的路径 3、剔除重复的图片,并显示。
<div>public class img { public string url = ""; MatchCollection matches = null; public img(string URL) { url = URL; if (url.IndexOf("http://") < 0) { url = "http://" + url; } // 获取网页内容 WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream, Encoding.Default); string getHtml = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close();</div> <div> // 定义正则表达式用来匹配 img 标签 Regex regImg = new Regex(@"<img/b[^<>]*?/bsrc[/s/t/r/n]*=[/s/t/r/n]*[""']?[/s/t/r/n]*(?<imgUrl>[^/s/t/r/n""'<>]*)[^<>]*?/?[/s/t/r/n]*>", RegexOptions.IgnoreCase); // 搜索匹配的字符串 matches = regImg.Matches(getHtml); } public string getList() { StringBuilder sb = new StringBuilder(url); if (matches.Count > 0) { ArrayList al = cutCF(matches, "imgUrl"); sb.Append(" 获取图片数目:" + al.Count + " 个"); string mig = ""; int count = 0; foreach (string mc in al) { string ximg = getImgUrl(mc.ToString()); if (ximg != "") { if (mig != ximg) { count++; mig = ximg; sb.Append("<img src="/" mce_src="/""" + mig + "/"/>"); } } else { ximg = getImgUrl(url, mc.ToString()); if (mig != ximg) { count++; mig = ximg; sb.Append("<img src="/" mce_src="/""" + mig + "/"/>"); } //WebClient wc = new WebClient(); //wc.DownloadFile(mc.Groups["imgUrl"].Value, HttpContext.Current.Server.MapPath("img") + "/" + i++ + mc.Groups["imgUrl"].Value.Substring(mc.Groups["imgUrl"].Value.LastIndexOf("/") + 1)); } } sb.Append("显示出图片数目:" + count + " 个"); } else { sb.Append("没找到图片!"); } return sb.ToString(); } /// <summary> /// 根据网页地址获取域名 /// </summary> /// <param name="strHtmlPagePath"></param> /// <returns></returns> public string GetUrlDomainName(string strHtmlPagePath) { string p = @"<a href="http://[^/.]*/.(?<domain>[^/">http://[^/.]*/.(?<domain>[^/</a>]*)"; Regex reg = new Regex(p, RegexOptions.IgnoreCase); Match m = reg.Match(strHtmlPagePath); return m.Groups["domain"].Value; } /// <summary> /// 得到绝对路径的图片url 如果是相对路径 则返回空 /// </summary> /// <param name="imgStr"></param> /// <returns></returns> private string getImgUrl(string imgStr) { string str = ""; Regex reg = new Regex(@"<a href="http://.+.([^/">http://.+.([^/</a>]*)", RegexOptions.Compiled | RegexOptions.IgnoreCase); foreach (Match mc in reg.Matches(imgStr)) { str = mc.Value; } return str; } /// <summary> /// 由图片的相对路径获取全路径 /// </summary> /// <param name="url">网址</param> /// <param name="imgstr">图片的相对路径</param> /// <returns>全路径</returns> private string getImgUrl(string url, string imgstr) { //获取网址中域名部分 string ym = url.Replace("http://", "_?"); string yuming = "http://" + (ym + "/").Substring((ym + "/").IndexOf("_?") + 2, (ym + "/").IndexOf("/") - 1); string str = ""; //如果图片的路径是 if (imgstr.IndexOf("/") == 0) { str = yuming + imgstr.Substring(1, imgstr.Length - 1); return str; } if (imgstr.IndexOf("../") == 1) { str = "http://" + ym.Substring(ym.IndexOf("_?") + 2, ym.LastIndexOf("/") - 1) + imgstr.Substring(1, imgstr.Length - 1); return str; } str = yuming + imgstr; return str; } /// <summary> /// 清除重复记录 /// </summary> /// <param name="mc"></param> /// <param name="value"></param> /// <returns></returns> private ArrayList cutCF(MatchCollection mc, string value) { ArrayList al = new ArrayList(); string newStr = ""; if (mc.Count > 0) { for (int j = 0; j < mc.Count - 1; j++) { newStr = mc[j].Groups[value].Value; bool mkbl = false; for (int i = j + 1; i < mc.Count; i++) { if (newStr == mc[i].Groups[value].Value) { mkbl = true; break; } } if (!mkbl) { al.Add(mc[j].Groups[value].Value); } } al.Add(mc[mc.Count - 1].Groups[value].Value); } return al; } } </div>
试试其它关键字
同语言下
.
gzip压缩
.
实现http多线程断点续传下载文件
.
实现多线程断点续传下载大文件
.
生成字符串的 CheckSum
.
根据 UserAgent 获取浏览器的类型和版本
.
根据 Agent 判断是否是智能手机
.
隐藏手机号中间四位为*方法
.
合并图片(二维码和其他图片合并)
.
ASP.NET CORE中判断是否移动端打开网页
.
ASP.NET(C#)实现页面计时(定时)自动跳转
可能有用的
.
gzip压缩
.
实现http多线程断点续传下载文件
.
实现多线程断点续传下载大文件
.
生成字符串的 CheckSum
.
根据 UserAgent 获取浏览器的类型和版本
.
根据 Agent 判断是否是智能手机
.
隐藏手机号中间四位为*方法
.
合并图片(二维码和其他图片合并)
.
ASP.NET CORE中判断是否移动端打开网页
.
ASP.NET(C#)实现页面计时(定时)自动跳转
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3