需求:查找页面图片并下载至本地;

实现:

首先:读取通过网络html内容,并用正则表达式查找图片地下。

其次:使用WebRequest.Create创建图片请求。

最后:把获取图片网络流数据通过FileStream创建本地文件并写入数据。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Text.RegularExpressions; namespace StreamDemo
{
class Program
{
static void Main(string[] args)
{
string url = "http://www.wzfzl.cn/fzl/mm/2013/0429/7092.html"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 5000;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream(); StreamReader sr = new StreamReader(s, Encoding.GetEncoding("gb2312"), true);
string html = sr.ReadToEnd(); //Console.Write(html); // 定义正则表达式用来匹配 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); // 搜索匹配的字符串
MatchCollection matches = regImg.Matches(html); int foreachIndex = 1;
foreach (Match match in matches)
{
string imageUrl = "http://www.wzfzl.cn/" + match.Groups["imgUrl"].Value;
if (imageUrl.IndexOf("uploads") > 0)
{
download(imageUrl, foreachIndex);
}
foreachIndex++;
}
sr.Close();
sr.Dispose(); Console.ReadKey();
} /// <summary>
/// 下载图片
/// </summary>
/// <param name="imageUrl"></param>
/// <param name="index"></param>
static void download(string imageUrl, int index)
{
string filename = DateTime.Now.Second.ToString() + new Random().Next();
string filepath = @"F:\uploads\" + filename + "_" + index + ".jpg"; //FileStream FileMode.OrenOrCreate 使用写模式可以省略下面创建文件语句
//if (!File.Exists(filepath))
//{
// File.Create(filepath).Dispose(); //创建文件并关闭创建对象资源。
//} //请求图片
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imageUrl);
request.Timeout = 5000; //请求超时时间
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream(); //创建文件并写入数据
FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
byte[] buffer = new byte[1024];
while (true)
{
int r = s.Read(buffer, 0, buffer.Length);
if (r == 0)
{
break;
}
fs.Write(buffer, 0, r);
}
fs.Close();
fs.Dispose();
response.Close(); Console.Write("Success : ");
Console.WriteLine(imageUrl); }
}
}

  

运行效果如下:

[C#基础实例]指定地址解析图片并下载的更多相关文章

  1. Android开发之异步获取并下载网络资源-下载图片和下载文本内容

    在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图:              下载图片截图   ...

  2. C++根据图片url下载图片

    需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...

  3. Windows 8实例教程系列 - 数据绑定基础实例

    原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...

  4. Java学习笔记——IO操作之以图片地址下载图片

    以图片地址下载图片 读取给定图片文件的内容,用FileInputStream public static byte[] mReaderPicture(String filePath) { byte[] ...

  5. python爬虫实战——5分钟做个图片自动下载器

      python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...

  6. Node.js meitulu图片批量下载爬虫1.051

    原有1.05版程序没有断点续传模式,现在在最近程序基础上改写一版1.051. //====================================================== // m ...

  7. Node.js umei图片批量下载Node.js爬虫1.00

    这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...

  8. 分享一款非常好用的Fatkun图片批量下载工具

    Fatkun图片批量下载 相信大家一定遇到过有着大量精美图片的网页,譬如美女照片.各种壁纸.设计素材.甚至是1024套图等等,但常常几十上百张的图要一张张手工去点击下载实在能让人抓狂!小编的工作中也常 ...

  9. restapi(5)- rest-mongo 应用实例:分布式图片管理系统之一,rest 服务

    最近有同事提起想把网页上的图片存在MongoDB里,我十分赞同.比起把图片以文件形式存放在硬盘子目录的方式,MongoDB有太多的优势.首先,MongoDB是分布式数据库,图片可以跨服务器存储.在一个 ...

随机推荐

  1. 实现android手机来电拦截系统页面弹出自定义页面特效

    如何实现android手机来电拦截系统页面弹出自定义页面特效, 首先:    我们需要注册一个监听来电的广播PhoneStateReceiver 类:其次:    在onReceive里面我们获取an ...

  2. 1全志 A20 camera移植

    转自 http://www.right.com.cn/forum/thread-146260-1-1.html   在Android4.0升级后,突然发现大量平台对Camera的支持均非常不好.要么C ...

  3. LinckedhashMap原理

    http://zhangshixi.iteye.com/blog/673789 TreeMap的key是有顺序的,是自然顺序,也可以指定比较函数. 但默认不是按插入的顺序.  为了让Map  JSON ...

  4. freeregex-0.01 使用文档

    -- freeregex,简化字符串处理 freeregex使用大体分为两个部分: 正则确定 功能操作 正则确定:共有EMAIL.IP等静态属性:anyOf(String regex)静态方法 :和o ...

  5. UNICODE

    // "; var i,j; var prevPage = -1; var nextPage = -1; beginId = setList[index].begin / 16 * 16 + ...

  6. JavaScript学习(一)—处理事件2

    下面的表中为最常用的 12 种 JavaScript 事件处理程序. 一.处理窗口事件(onload事件,onunload事件,onresize事件,onmove事件,onabort事件,onerro ...

  7. iOS 根据字符串内容动态计算行高

    + (CGFloat)textHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size ...

  8. 如何让textarea不可拖拽

    文本域textarea有一个特性,就是可以拖拽改变其大小,但是在布局严格要求的页面中,这种特性显然会影响布局. 一行代码就可以搞定: textarea{ resize:none;} 但是在chrome ...

  9. Citrix Reciver提示安装程序集错误

    打开注册表查找是否有RegistrySizeLimit这个项目,如果有更改成8个f,如果没有就需要手动建立一个之后输入8个f,操作方法如下: 到了 HKEY_LOCAL_MACHINE\SYSTEM\ ...

  10. greendao操作数据库的使用方法

    第一步:把greendao-1.3.0-beta-1,greendao-generator-1.3.1两个jar包加载到工程的lib的文件夹中,一定要右键点击Add As Library后才能使用. ...