C#爬取目标网址图片(控制台应用程序)

C#爬取目标网址的图片

hello,大家好。我是闲齁齁,一枚用发量写代码的程序员。由于这段时间进厂进修(摸鱼)导致有一段时间没有更新博客,今天主要写的是使用C#爬取目标网址的图片,也就是爬虫。大家都知道绝大部分的爬虫都是使用Python来写的,但这并不代表别的语言不能写。所以作为一名C#程序员,今天用C#搞了一个简单的小爬虫。
其实稍微简单的爬虫就分那么几步,当然高深的我写不出来(我是不会告诉你们我写不出来的)。

  1. HTTP的请求与响应
  2. 网页流的获取
  3. 根据分析得到相关资源
  4. 下载并进行整理
    首先说第一步HTTP的请求与响应,在C#里有好几个类可以实现:“WebClient,WebRequest,WebRespond,HttpWebRequest”具体类的功能可以查询文档。第二步就是获取网页流并读取,第三步是根据分析得到相关资源,比如正则表达式,获取使用一些抓包工具的解析得到你所需要的,我在这使用的是正则表达式。第四步就是下载并整理,WebClien类的DownloadFile等方法可以下载。
    WebClien的具体使用
    接下来就到了实现功能环节:
 #region   爬取图片代码 public static void HttpGetHandle(string url,string path, int name) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.CreateHttp(url); webRequest.Method = "GET"; webRequest.UserAgent = " Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0"; var webResponse = webRequest.GetResponse(); StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII); string str = streamReader.ReadToEnd(); streamReader.Close(); if (string.IsNullOrEmpty(str)) { Console.WriteLine("————————-错误—————————"); Console.ReadKey(); } Regex regex = new Regex(@"ess-data='(.*?)'>"); MatchCollection match = regex.Matches(str); WebClient client = new WebClient(); int temp = 0; try { foreach (Match match1 in match) { string src = match1.Groups[1].Value; if (src.Contains("http") && !src.Contains(".svg")) { temp++; client.DownloadFile(src, path + name + ".jpg"); name++; Console.WriteLine("\n正在爬取——图片下载地址" + "|" + src + "|" + temp); } } } catch (Exception ex) { Console.WriteLine("-------------" + ex); } stopwatch.Stop(); Console.WriteLine("————-———爬取成功!—————"); Console.WriteLine("\n_______总共爬取了" + temp + "张图片!_______________"); Console.WriteLine("\n一共耗时" + stopwatch.ElapsedMilliseconds / 1000 + "秒"); } #endregion #region   创建一个储存图片的文件夹 public static void CreatFile(string path) { if (Directory.Exists(path)) { Console.WriteLine("\n————————开始——————————"); } else { DirectoryInfo directory = new DirectoryInfo(path); directory.Create(); } } #endregion 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

这两个方法被我单独写了一个类,接下来就是主函数的直接调用了。

static void Main(string[] args) { Console.WriteLine("请输入网址!"); string url = Console.ReadLine(); Console.WriteLine("请输入储存图片的文件夹的路径.路径格式见txt文本"); string path = Console.ReadLine(); HttpCrawelHelper.CreatFile(path); Console.WriteLine("请输入要储存的图片名称,要求是整数格式"); int name = int.Parse(Console.ReadLine()); HttpCrawelHelper.HttpGetHandle(url, path, name); Console.ReadKey(); }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

因为图片命名比较繁琐,毕竟世界上只有两种人,UserName和username,所以我直接用整数命名的。
接下来给大家看一下效果图。
在这里插入图片描述
在这里插入图片描述
最后认识一下吧,我叫闲齁齁,一枚用发量写代码的程序员,期待与大家一起成长一起进步。

文章来源: blog.csdn.net,作者:闲齁齁,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43434929/article/details/114987939

(完)