asp.net采集网页图片的具体方法_实用技巧

在网上找了下大多都是通过字符串操作找出img标签,这种方式操作起来比较麻烦,而且代码看起来比较累。这里我用的方法是通过WebBrowser来加载一个页面,然后HTMLDocument类来操作省去了字符串操作的步骤,直接调用GetElementsByTagName把所有图片地址返回到一个HtmlElementCollection对象里。
代码如下:

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public class GatherPic
    {
        private string savePath;
        private string getUrl;
        private WebBrowser wb;
        private int iImgCount;
        //初始化参数
        public GatherPic(string sWebUrl, string sSavePath)
        {
            this.getUrl = sWebUrl;
            this.savePath = sSavePath;
        }
        //开始采集
        public bool start()
        {
            if (getUrl.Trim().Equals(""))
            {
                MessageBox.Show("哪来的虾米连网址都没输!");
                return false;
            }
            this.wb = new WebBrowser();
            this.wb.Navigate(getUrl);
            //委托事件
            this.wb.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
            return true;
        }
        //WebBrowser.DocumentCompleted委托事件
        private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //页面里框架iframe加载完成不掉用SearchImgList()
            if (e.Url != wb.Document.Url) return;
            SearchImgList();
        }
        //检查出所有图片并采集到本地
        public void SearchImgList()
        {
            string sImgUrl;
            //取得所有图片地址
            HtmlElementCollection elemColl = this.wb.Document.GetElementsByTagName("img");
            this.iImgCount = elemColl.Count;
            foreach (HtmlElement elem in elemColl)
            {
                sImgUrl = elem.GetAttribute("src");
                //调用保存远程图片函数
                SaveImageFromWeb(sImgUrl, this.savePath);
            }
        }
        //保存远程图片函数
        public int SaveImageFromWeb(string imgUrl, string path)
        {
            string imgName = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("/") + 1);
            path = path + "\\" + imgName;
            string defaultType = ".jpg";
            string[] imgTypes = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
            string imgType = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("."));
            foreach (string it in imgTypes)
            {
                if (imgType.ToLower().Equals(it))
                    break;
                if (it.Equals(".bmp"))
                    imgType = defaultType;
            }
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
                request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)";
                request.Timeout = 10000;
                WebResponse response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                if (response.ContentType.ToLower().StartsWith("image/"))
                {
                    byte[] arrayByte = new byte[1024];
                    int imgLong = (int)response.ContentLength;
                    int l = 0;
                    // CreateDirectory(path);
                    FileStream fso = new FileStream(path, FileMode.Create);
                    while (l < imgLong)
                    {
                        int i = stream.Read(arrayByte, 0, 1024);
                        fso.Write(arrayByte, 0, i);
                        l += i;
                    }
                    fso.Close();
                    stream.Close();
                    response.Close();
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
            catch (WebException)
            {
                return 0;
            }
            catch (UriFormatException)
            {
                return 0;
            }
        }
    }
}
//-----------------调用代码--------------------
GatherPic gatherpic = new GatherPic(“http://www.baidu.com”,"C:\test");
//请确保c:\下存在test路径
gatherpic.start()

时间: 2024-09-19 20:40:16

asp.net采集网页图片的具体方法_实用技巧的相关文章

ASP.NET缓存管理的几种方法_实用技巧

尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战.因为HTTP是一个无状态的协议并且web服务无法识别不同请求的用户.识别不同的请求究竟是哪个特定用户发出的,并且存储这些信息以便它在以后请求中能被重新使用,对我们来说非常重要.ASP.NET提供了很多特性用来在客户端和服务器端存储这些数据,但是有时我们会对"我们什么时候使用它们(哪个)"感到疑惑.在ASP.NET中,我们会遇到像Session,Application以及Cache这些对象,为了有效地在

asp.net基于session实现购物车的方法_实用技巧

本文实例讲述了asp.net基于session实现购物车的方法.分享给大家供大家参考,具体如下: //加入购物车 protected void LinkButton2_Click(object sender, EventArgs e) { DataTable dt = null; //用户购买商品 如果 没有登录 则提示登录 if (Session["userName"] == null) { Common.MessageBox.ShowAndRedirectTo(this.Page,

ASP.NET防范SQL注入式攻击的方法_实用技巧

一.什么是SQL注入式攻击?  SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击.常见的SQL注入式攻击过程类如:  ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码.  ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或

asp.net实现C#绘制太极图的方法_实用技巧

本文实例讲述了asp.net实现C#绘制太极图的方法.分享给大家供大家参考.具体如下: 成品图如下所示: html页面: 注意设置: 复制代码 代码如下: ContentType="Image/Jpeg" 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TaiJiTu.aspx.cs" Inherits="TaiJiTu&qu

ASP.NET抓取网页内容的实现方法_实用技巧

本文实例讲述了ASP.NET抓取网页内容的实现方法.分享给大家供大家参考.具体实现方法如下: 一.ASP.NET 使用HttpWebRequest抓取网页内容 复制代码 代码如下: /// <summary>方法一:比较推荐  /// 用HttpWebRequest取得网页源码  /// 对于带BOM的网页很有效,不管是什么编码都能正确识别  /// </summary>  /// <param name="url">网页地址" </

asp.net实现access数据库分页的方法_实用技巧

asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法.希望对大家的asp.net程序设计能有所帮助. 具体实例代码如下: <divclass="page"id="ctrlRecordPage"> 总<asp:LabelID="Zpage"runat="server"Text="1"></asp:Label

win2003服务器asp.net权限设置问题及解决方法_实用技巧

服务器asp.net权限设置问题及解决方法 本人服务器使用环境:WIN 2003 ASP.NET相对于ASP,设置权限方面有点不同,有一点儿设置错了都运行不到.在网上搜索到的都是很垃圾的答案,没有一个用得到的,下面是我自己设置并从中遇到的问题摸索后得到的经验,给大家分享. ASP.NET需要用到USERS组的权限,因为我也遇过很多次自己设置了权限之后发现网站运行不了,很郁闷.下面根据出现的问题,一点点解决,让你的ASP.NET运行起来.. 问题一: 未找到路径"C:\"的一部分. 说明

asp.net清空Cookie的两种方法_实用技巧

asp.net清空Cookie的两种方法 第一种 Cookie.Expires=[DateTime]; Response.Cookies("UserName").Expires = 0; 第二种 Response.Cookies["admin"].Expires = DateTime.Now.AddDays(-1); 

ASP.Net下载大文件的实现方法_实用技巧

本文实例讲述了ASP.Net下载大文件的实现方法.分享给大家供大家参考.具体分析如下: 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(参考OSChina的这个网址可以找到大部分文件类型的对照表:http://tool.oschi