winform采集网站美女图片程序---多线程篇

之前做的采集程序,  是单线程的,  一个图片列表, 要等着一一采完....浪费了不少时间,  正好今天家里带宽升级, 可以使用多线程采集了.... 连夜改进原来的程序.  使用多线程去采集....

设定思路: 采集目标: http://www.8kmm.com,   已知网址列表(List保存),  应用多线程(Thread)读取该列表, 获取url时不能重复(加锁Lock). 允许无序采集!

先放个美女提提神!

多线程核心代码:

  1 #region 全局变量
  2         //线程列表
  3         List<Thread> threadslList = new List<Thread>();
  4         //Url列表
  5         List<string> uUrls = new List<string>();
  6         //处理完毕的列表
  7         List<string> OkUrls = new List<string>();
  8         //成功取得的美女图片数量
  9         public int ImgCount = 0;
 10 #endregion
 11
 12
 13 //取图开始 按钮事件
 14  private void lbtnGetWebImgStart_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 15         {
 16             lbtnGetWebImgStart.Enabled = false;
 17             GetWebSiteImg();
 18         }
 19
 20 //取图停止 按钮事件
 21         private void lbtnGetWebImgStop_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 22         {
 23             try
 24             {
 25                 foreach (Thread t in threadslList)
 26                 {
 27                     if (t != null)
 28                     {
 29                         t.Abort();
 30                     }
 31                 }
 32             }
 33             catch (Exception ex)
 34             {
 35                 WriteLog("停止失败:" + ex.Message);
 36             }
 37             finally
 38             {
 39                 lbtnGetWebImgStart.Enabled = true;
 40             }
 41         }
 42
 43         /// <summary>
 44         /// 获取图片主方法
 45         /// </summary>
 46         private void GetWebSiteImg()
 47         {
 48             try
 49             {
 50                 ImgCount = 0;
 51                 OkUrls.Clear();
 52                 uUrls.Clear();
 53                 threadslList.Clear(); //先初始化以上
 54                 string[] urls = txtUrl.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
 55                 lblC.Text = urls.Length.ToString(CultureInfo.InvariantCulture);
 56                 uUrls = new List<string>(urls);
 57                 for (int i = 0; i < int.Parse(numThreadUD.Text); i++) // 循环创建线程
 58                 {
 59                     Thread t = new Thread(Task);
 60                     t.Name = i.ToString();
 61                     t.IsBackground = true;
 62                     threadslList.Add(t);
 63                     t.Start();
 64                 }
 65             }
 66             catch (Exception ex)
 67             {
 68                 WriteLog(ex.Message);
 69             }
 70         }
 71
 72
 73    public void Task()
 74         {
 75             while (uUrls.Count > 0)
 76             {
 77                 lblMsg.Text = string.Format("剩余:{0},已访问:{1},当前线程数:{2}", uUrls.Count, (OkUrls.Count + 1), threadslList.Count);
 78                 string url = GetUrl();
 79                 if (url == "")
 80                 {
 81                     break;
 82                 }
 83                 else
 84                 {
 85                     if (GetHttpImg(url) == 200)//只有状态200才是正常的, GetHttpImg是我封装的方法, 获取网页, 正则取得所有合规范的图片.
 86                     {
 87                         OkUrls.Add(url);
 88                         lblInfoStart.Text = (int.Parse(lblInfoStart.Text) + 1).ToString(CultureInfo.InvariantCulture);
 89                         WriteHtml(txtUrl.Text);
 90                         if (lblC.Text == lblInfoStart.Text)//判断当前数量是否已是总数.
 91                         {
 92                             lblMsg.Text = "完成";
 93                         }
 94                     }
 95                 }
 96             }
 97         }
 98
 99
100         /// <summary>
101         /// 线程加锁,防止多个线程同时从list里面取出第一个
102         /// </summary>
103         /// <returns></returns>
104         public string GetUrl()
105         {
106             lock ("GetUrl")
107             {
108                 if (uUrls.Count > 0)
109                 {
110                     string url = uUrls[0];
111                     uUrls.RemoveAt(0);
112                     return url;
113                 }
114                 else
115                 {
116                     return "";
117                 }
118             }
119         }

代码超级简单,  测试抓取几个列表,  没有问题, 等会用它去抓更多MM。。。

时间: 2024-12-28 12:01:04

winform采集网站美女图片程序---多线程篇的相关文章

python爬取网站美女图片

今天周五,项目刚刚上线完,有些时间,闲着无聊,继续复习爬虫,这次打算爬取网站的美女图片.得先找到目标,然后目标网站还不会反爬虫,因为自己只是小白,好了开始. 寻找目标,发现了目标,哈哈 http://www.meizitu.com 里面图片按专题分类.先看下页面找出相关源码 页面 源码 即只要抓出来图片集的link跟图片集里面的link对应的jpg就可以了, 可以用beautifulsoup或者正则匹配,我这里用正则匹配需要的link.然后遍历整个网站就可以了 请看源码解释 #!bin/pyth

C# Winform版批量压缩图片程序

需求 上周,领导给我分配了一个需求:服务器上的图片文件非常大,每天要用掉两个G的大小的空间,要做一个自动压缩图片的工具处理这些大图片.领导的思路是这样的: 1)打开一个图片,看它的属性里面象素是多少,大于1000就按比例缩小到1000. 2)再看它的品质属性,比如我们标准是50,如果大于这个值再修改品质. 压缩后的文件大小不能超过200k. 思路 因为服务器上的图片文件名是加密处理过的,和图片文件一起存在的还有其它附件,没有后缀名,用肉眼根本看不出来是否是图片文件.所以刚开始的时候,我的思路是先

PHP多线程批量采集下载美女图片的实现代码

使用curl的多线程,另外curl可以设置请求时间,遇到很慢的url资源,可以果断的放弃,这样没有阻塞,另外有多线程请求,效率应该比较高 下面是代码实现 /** * curl 多线程 * @author http://www.lai18.com * @param array $array 并行网址 * @param int $timeout 超时时间 * @return mix */ public function Curl_http($array,$timeout='15'){ $res =

美女图片采集器 (源码+解析)

前言: 有一段时间没写博客了, "持之以恒"徽章都暗了, 实在不该. 前一段确实比较忙, ...小小地给自己的懒找个借口吧. 大二即将结束, 学习iOS也有一段时间了.今天抽点时间, 开源一个前几天刚上传的App里面的一个功能, RT, 美女图片采集器.   美女.. 相信没有人不喜欢吧, 基于此, 这个小Demo应运而生. 效果演示: 看到这里, 如果还有兴趣学习的话, 可以先到我的git中下载源码, 然后配合着源码看我下面的解析.相信, 会让你有所收获的. git下载链接: Bea

基于C# Winform的简易聊天程序[第一篇-两端通信]

程序简介 本聊天程序支持局域网内部客户端与服务端之间的互相通信. 原理 启动服务端后,服务端通过持续监听客户端发来的请求,一旦监听到客户端传来的信息后,两端便可以互发信息了.服务端需要绑定一个IP,用于客户端在网络中寻找并建立连接.信息发送原理:将手动输入字符串信息转换成机器可以识别的字节数组,然后调用套接字的Send()方法将字节数组发送出去.信息接收原理:调用套接字的Receive()方法,获取对端传来的字节数组,然后将其转换成人可以读懂的字符串信息. 界面设计 - 服务端 IP文本框 na

黑马程序员-Java多线程篇《四》

                         ------- android培训.java培训.期待与您交流! ---------- 1.线程和进程的概念 1.1.进程(Process):拥有独立的内存空间,每个独立执行的程序称为进程   1.2.线程(Thread):线程是一个程序内部的一条执行路径,Java虚拟机允许应用程序并发地运行多个执行线程   1.3.线程和进程的区别           每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大           线程

自己动手写美女图片下载器

前言:看到标题可能会有人觉得似曾相识,没错,这篇博文的来源正是根据杨中科老师的<百度美女图片下载器开发教程.Net版>.因为我也观看了该教程,觉得很好玩,于是乎想自己独立完成一次,作为对之前基础学习内容的回顾和运用.以博文的形式和大家分享整个开发过程主要是想借此机会来重新整理下思路.锻炼下自己的表达能力.您如果对下面要用到知识点很熟悉,可忽略此文. 一.主要技术 Winform常用控件的基本使用 HttpWebRequest请求其他网站内容 Newtonsoft.Json.dll组件解析JSO

Scrapy爬取美女图片第三集 代理ip(上) (原创)

首先说一声,让大家久等了.本来打算520那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复了一些bug(现在肯定有人会说果然是单身狗). 好了,废话不多说,咱们进入今天的主题.上两篇 Scrapy爬取美女图片 的文章,咱们讲解了scrapy的用法.可是就在最近,有热心的朋友对我说之前的程序无法爬取到图片,我猜应该是煎蛋网加入了反爬虫机制.所以今天讲解的就是突破反爬虫机制的上篇 代理

iOS开发多线程篇 05 —GCD介绍

iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中