[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是分布式数据库,图片可以跨服务器存储.在一个 ...
随机推荐
- mobx源码解读1
mobx是redux的代替品,其本身就是一个很好的MVVM框架.因此花点力气研究一下它. 网上下最新的2.75 function Todo() { this.id = Math.random() mo ...
- Java:基于LinkedList实现栈和队列
1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...
- 去掉IE下input的叉号
IE10下的Input Text和谷歌下面的 input search 一旦输入内容,会在最右端出现一个叉号,点击后,内容就会自动清空,看似方便,其实有些场景并不需要,需要写代码清除掉. 代码如下: ...
- 路由器TL-WR941N V5.1:救砖、MOD
完成效果图: --- 拆芯片时需要贴上胶带,防止误伤: --- 堆锡拆除旧的flash芯片: --- 购入物品: --- 编程器刷入Breed: --- Web刷机: --- 预处理材料: --- 7 ...
- Perl爬取江西失信执行
#! /usr/bin/perl use strict; use Encode qw(encode decode); binmode(STDIN,":encoding(utf8)" ...
- varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- 利用 cookie 模拟网站登录
import urllib import urllib2 import cookielib filename = 'cookie.txt' \#声明一个MozillaCookieJar对象实例来保存c ...
- B. Checkout Assistant 01背包变形
http://codeforces.com/problemset/problem/19/B 对于每个物品,能偷多ti个,那么先让ti + 1, 表示选了这个东西后,其实就是选了ti + 1个了.那么只 ...
- autoLayout约束图解