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

设定思路: 采集目标: 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。。。

转载于:https://www.cnblogs.com/jackrebel/p/4279612.html

winform采集网站美女图片程序---多线程篇相关推荐

  1. 爬虫爬取二次元网站美女图片

    爬虫爬取二次元网站美女图片 前言 xpath解析 需求分析 代码编写 总代码 前言 本次需要爬取二次元网站cos板块下的图片 需要用到request模块与lxml模块,所以请提前安装好这两个模块,打开 ...

  2. 爬虫获取网站美女图片

    爬虫获取网站美女图片 import requests from lxml import html import os if __name__=="__main__":etree = ...

  3. Python爬取mn52网站美女图片以及图片防盗链的解决方法

    防盗链原理 http标准协议中有专门的字段记录referer 一来可以追溯上一个入站地址是什么 二来对于资源文件,可以跟踪到包含显示他的网页地址是什么 因此所有防盗链方法都是基于这个Referer字段 ...

  4. Python3+selenium 爬取网站美女图片最简单版本

    听说python是爬虫利器,用java几百行的代码,python十几行就搞定了,所以决定自己来感受一下python的方便,参考了很多文章,自己都忘记了,就不一一列举了 1.安装python,pycha ...

  5. Java爬虫之利用Jsoup+HttpClient爬取类叔叔不约匿名聊天网站的图片,未果——后爬取某网站美女图片案例

    博主最近学了一点爬虫的知识,闲着无聊,秉承学以致用的理念,于是突然想到何不挑战一下,爬取一些叔叔不约网站的图片,来巩固一下所学知识(#滑稽).说干就干,打开eclipse或idea,创建maven工程 ...

  6. python爬取网站美女图片

    今天周五,项目刚刚上线完,有些时间,闲着无聊,继续复习爬虫,这次打算爬取网站的美女图片.得先找到目标,然后目标网站还不会反爬虫,因为自己只是小白,好了开始. 寻找目标,发现了目标,哈哈 http:// ...

  7. Python多线程爬取7160网站美女图片

    直接上代码 #coding=UTF-8 from urllib.request import urlopen from pyquery import PyQuery as pq import re i ...

  8. 靖哥哥教你如何用java做爬虫抓取网站美女图片(详解步骤)

    原文 https://www.jggbk.com/blogs/article/258.html

  9. 拿下了一个美女图片网站!

    原文链接:https://www.freebuf.com/articles/web/250308.html 大家好,我是鸟哥,一个半路出家的程序员. 这几天一直再出搭建个人网站的文章,为了进一步提高大 ...

最新文章

  1. [na]tcpdump非常实用的抓包实例
  2. Android的单位px,pt,dp,sp总结和获取屏幕分辨率
  3. NOIP模拟测试19「count·dinner·chess」
  4. leetcode931. 下降路径最小和(动态规划)
  5. 各类锁(互斥锁,自旋锁,读写锁,乐观锁,悲观锁,死锁)
  6. CDH 6 安装服务哈希验证失败 解决方法
  7. 关于服务器性能的一些思考
  8. Java基础学习总结(106)——高级JAVA工程师必需技能
  9. SpringCloud工作笔记038---spring cloud-简单网关权限控制_直接在zuul里面做
  10. 服务器重启宝塔面板打不开了【已完美解决】
  11. 机器学习中五种常用的聚类算法
  12. 江湖小白之一起学Python (三)双色球历史数据抓取
  13. Word中有些空行无法删除,我是这样解决的.............
  14. 华中科技大学计算机考研信息汇总
  15. 水木周平戏说中国网络黑幽默!
  16. xbox360 双65厚机自制系统无硬盘 U盘玩游戏方法
  17. 桌面运维成功考证HCIP,我是如何下定决心改变的
  18. JQuery对象与JavaScript对象的区别与转换
  19. winDebug 调试
  20. 七巧板涂色算法(Python)

热门文章

  1. 解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
  2. 【微服务】唱吧DevOps的落地,微服务CI/CD的范本技术解读
  3. 蚂蚁双11的这群筑梦师
  4. executeUpdate()方法报错或者不执行
  5. QQ兴趣部落引流方法经验谈
  6. 朗科人脸加密技术全球首发 移动存储注入生物识别
  7. redis 学习(17) -- RDB
  8. 台式计算机销量排名,2016最新联想台式电脑排行榜 销量前十款式推荐【图文】...
  9. python flask教程百度云,Python Web框架Flask中使用百度云存储BCS实例
  10. Android AudioRecord录音功能实现并pcm转wav