[C#基础实例]指定地址解析图片并下载
需求:查找页面图片并下载至本地;
实现:
首先:读取通过网络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#基础实例]指定地址解析图片并下载的更多相关文章
- Android开发之异步获取并下载网络资源-下载图片和下载文本内容
在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图: 下载图片截图 ...
- C++根据图片url下载图片
需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...
- Windows 8实例教程系列 - 数据绑定基础实例
原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...
- Java学习笔记——IO操作之以图片地址下载图片
以图片地址下载图片 读取给定图片文件的内容,用FileInputStream public static byte[] mReaderPicture(String filePath) { byte[] ...
- python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...
- Node.js meitulu图片批量下载爬虫1.051
原有1.05版程序没有断点续传模式,现在在最近程序基础上改写一版1.051. //====================================================== // m ...
- Node.js umei图片批量下载Node.js爬虫1.00
这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...
- 分享一款非常好用的Fatkun图片批量下载工具
Fatkun图片批量下载 相信大家一定遇到过有着大量精美图片的网页,譬如美女照片.各种壁纸.设计素材.甚至是1024套图等等,但常常几十上百张的图要一张张手工去点击下载实在能让人抓狂!小编的工作中也常 ...
- restapi(5)- rest-mongo 应用实例:分布式图片管理系统之一,rest 服务
最近有同事提起想把网页上的图片存在MongoDB里,我十分赞同.比起把图片以文件形式存放在硬盘子目录的方式,MongoDB有太多的优势.首先,MongoDB是分布式数据库,图片可以跨服务器存储.在一个 ...
随机推荐
- php 之跨域上传图片
因为要将所有上传的图片上传到一台独立的图片服务器上面,js上传时存在跨域问题,网上找到这种,通过php curl方式,将图片重新发送到另外一台服务器上保存,并返回图片路径!这种方式存在一定问题:1,上 ...
- Content has been consumed
if(response.getEntity() != null && response.getEntity().getContent() != null) { message = IO ...
- 常用JS效果 需要时更新。。。
1.手风琴效果 JS: $(function() { var aMenuOneLi = $(".menu-one > li"); var aMenuTwo = ...
- Mac下安装 PIL
最近入手MacBook Pro 在配置PIL环境的时候遇到一些问题.现在把解决方式记录下来,希望对有需要的有所帮助. 1. 安装brew : brew 又叫Homebrew,是Mac OSX上的软件 ...
- 【软件工程】“谁是卧底”之NABC分析
结对编程结束之后,迎来了结队编程,经过了很长时间的思考,想到了“谁是卧底”的idea,以下是该游戏的NABC分析: N(need): 即需求,近期,内地一知名综艺节目将“谁是卧底”游戏推广到年轻人中, ...
- Head First Html and CSS学习笔记之CSS
第七章 CSS入门 元素的许多属性都可以设置样式,太多了,记不住,可以参考<CSS Pocket Reference>. 外部样式表,<link type = "text/ ...
- 玩转UICollectionViewLayout
前言: 实 现垂直方向的单列表来说,使用UITableView足以:若是需要构建横向滑动列表.gridView等直线型布局,则使用 UICollectionView+UICollectionViewF ...
- Libevent 的多线程操作
起因是event_base 跨线程add/remove event 导致崩溃或者死循环. 据查:libvent 1.4.x是非线程安全的,要跨线程执行event_add,会有问题.因此传统做法是通过p ...
- fastjson将json字符串转化成bean对象解析出错的检查方法
我的情况是:解析第一层数据成功,解析第二层嵌套的数据失败.如: { "response": { "resultcode": "0", &qu ...
- Zookeeper-Zookeeper可以干什么
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...