这篇这篇文章主要是展示了一个C#语言如何抓取网站中的图片。实现原理就是基于http请求。C#给我们提供了HttpWebRequest和WebClient两个对象,方便发送请求获取数据,下面看如何实

1,HttpGetAction方法。用于发送请求获取数据后处理字符串得到图片地址

 public static void HttpGetAction(string url,string path,int name)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine("抓取地址:" + url);
string result = string.Empty;
HttpWebRequest webRequest = WebRequest.CreateHttp(url);
webRequest.Method = "GET";
var response= webRequest.GetResponse();
using (StreamReader reader = new StreamReader((response as HttpWebResponse).GetResponseStream(), Encoding.UTF8))
{
result = reader.ReadToEnd();
reader.Close();
}
if (string.IsNullOrEmpty(result))
{
Console.WriteLine("请求地址错误");
Console.ReadKey();
return;
}
//提取img标签src地址
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(result);
//爬取数量
int i = ;
WebClient web = new WebClient();
// 取得匹配项列表
foreach (Match match in matches)
{
string imgsrc = match.Groups["imgUrl"].Value;
if (imgsrc.Contains("http") && !imgsrc.Contains(".svg"))
{
i++;
HttpGetImg(web,imgsrc, path,name);
name++;//图片名
}
}
sw.Stop();
Console.WriteLine("爬取完成!总共爬取了" + i + "张图片!");
Console.WriteLine("爬取图片耗时:" + sw.ElapsedMilliseconds / + "秒");
}

2,HttpGetImg方法。下载图片到指定目录

 public static void HttpGetImg(WebClient web, string src,string path,int name)
{
Console.WriteLine("爬取图片:" + src);
if (!Directory.Exists(path))
{
Console.WriteLine("路径错误!");
Console.ReadKey();
return;
}
web.DownloadFile(src, path+name+".jpg");
Console.WriteLine("爬取图片成功:" + name+".jpg");
}

3,控制台调用

 static void Main(string[] args)
{
string url= "https://www.xxxxxx.com/";
string path = Path.Combine(@"D:\word 资料\img\冬天\");
HttpHelper.HttpGetAction(url,path,);
Console.ReadKey();
}

效果图:

一个简单的C#爬虫程序就完成了。如有错误的地方还望大神指点

原文来自:一个简单的C#程序-曾亚平个人博客

一个简单的C#爬虫程序的更多相关文章

  1. 一个简单的python爬虫程序

    python|网络爬虫 概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web ...

  2. 一个简单的P2P传输程序

    写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...

  3. IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序

    前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...

  4. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...

  5. 一个简单的MDI示范程序(Delphi)

    http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...

  6. 一个简单的DDraw应用程序2

    //------------------------------------------------------------------------- // 文件名 : 6_1.cpp// 创建者 : ...

  7. 一个简单的DDraw应用程序

        阅读排行榜 1. C/C++ 笔试.面试题目大汇总(72915) 2. [STL]list基础(21718) 3. COM笔记-CoCreateInstance(14842) 4. C/C++ ...

  8. Linux内核监控模块-1-驱动模块(LKM)开发(以一个简单的hello world程序为例)

    在上面一篇中介绍到,监控模块要做成一个驱动模块(或者说是可加载模块,LKM),动态的加载到Linux内核中.那么这篇就简单的介绍一下怎样做一个这样的驱动模块.   以简单的hello world程序为 ...

  9. C++ 容器的综合应用的一个简单实例——文本查询程序

    C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...

随机推荐

  1. 某PHP发卡系统SQL注入

    源码出自:https://www.0766city.com/yuanma/11217.html 安装好是这样的 审计 发现一处疑似注入的文件 地址:/other/submit.php 看到这个有个带入 ...

  2. css 文字间距

    letter-spacing :  字与字之间的距离 text-indent : 行的抬头间距 line-height : 行高度

  3. [BZOJ2392][HAOI2011]Problem c

    Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...

  4. Luogu P2297 刷图 DP

    题目背景 loidc,LOI中的传说级哲♂学家,曾经创造一天内入坑maxlongint个弃坑0x7fffffff个的神奇纪录.目前,loidc最喜欢的游戏就是地下城与勇♂士. 题目描述 Loidc是一 ...

  5. Java 异常(二) 自定义异常

    上篇文章介绍了java中异常机制,本文来演示一下自定义异常 上篇文章讲到非运行时异常和运行时异常,下面我们来看一下简单实现代码. 首先,先来看下演示目录 非运行时异常 也称 检查时异常 public ...

  6. JDK1.8 新特性详解

    一  引言 现在java 10都已经出来了,而自己对java 8的一些新特性都不了解,很是惭愧,而且许多面试都有问到java8的新特性,借此博客好好学习这些新特性 二  新特性 1 default关键 ...

  7. Easy Poi入门

    最近有一个需求,就是把excel中的内容,解析成Json对象格式的文件输出. 然后就上网找了一波资料,大神们都说用POI来做.但是我看了一下POI的解析过程,但是为了秉着高效的原则,花最少的时间去实现 ...

  8. Log4j slf4j 配置简单介绍

    Log4j slf4j 配置简单介绍 先借鉴一篇很好的文章 为什么要使用SLF4J而不是Log4J import org.slf4j.Logger; import org.slf4j.LoggerFa ...

  9. markdown(typora)基本语法

    目录 * 标题 * 加粗 * 斜体 * 高亮 * 上标 * 下标 * 代码引用(>式和```式) * 代码引入(`式) * 插入链接(链接显示) * 插入链接(连接描述显示) * 插入图片(链接 ...

  10. Redis(十)集群:Redis Cluster

    一.数据分布 1.数据分布理论 2.Redis数据分区 Redis Cluser采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:slot=CRC16(key)&16 ...