C#多线程爬虫抓取免费代理IP的示例代码

发布时间 - 2026-01-11 02:59:14    点击率:

这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推..........然后直接创建一个控制台应用,将我下面的代码COPY替换就可以运行,下面就来讲讲我两年前做爬虫经历,当时是给一家公司做,也是用的C#,不过当时遇到一个头痛的问题就是抓的图片有病毒,然后系统挂了几次。所以抓网站图片要注意安全,虽然我这里没涉及到图片,但是还是提醒下看文章的朋友。

 class Program
  {
    //存放所有抓取的代理
    public static List<proxy> masterPorxyList = new List<proxy>();
    //代理IP类
    public class proxy
    {
      public string ip;

      public string port;
      public int speed;

      public proxy(string pip,string pport,int pspeed)
      
      {
        this.ip = pip;
        this.port = pport;
        this.speed = pspeed;
       }


    }
    //抓去处理方法
    static void getProxyList(object pageIndex)
    {

      string urlCombin = "http://www.xicidaili.com/wt/" + pageIndex.ToString();
      string catchHtml = catchProxIpMethord(urlCombin, "UTF8");
      

      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
      doc.LoadHtml(catchHtml);


      HtmlNode table = doc.DocumentNode.SelectSingleNode("//div[@id='wrapper']//div[@id='body']/table[1]");

      HtmlNodeCollection collectiontrs = table.SelectNodes("./tr");  

 
      
        for (int i = 0; i < collectiontrs.Count; i++)
        {
          HtmlAgilityPack.HtmlNode itemtr = collectiontrs[i];


          HtmlNodeCollection collectiontds = itemtr.ChildNodes;
          //table中第一个是能用的代理标题,所以这里从第二行TR开始取值
          if (i>0)
          {
            HtmlNode itemtdip = (HtmlNode)collectiontds[3];

            HtmlNode itemtdport = (HtmlNode)collectiontds[5];

            HtmlNode itemtdspeed = (HtmlNode)collectiontds[13];
 
            string ip = itemtdip.InnerText.Trim();
            string port = itemtdport.InnerText.Trim();


            string speed = itemtdspeed.InnerHtml;
            int beginIndex = speed.IndexOf(":", 0, speed.Length);
            int endIndex = speed.IndexOf("%", 0, speed.Length);

            int subSpeed = int.Parse(speed.Substring(beginIndex + 1, endIndex - beginIndex - 1));
            //如果速度展示条的值大于90,表示这个代理速度快。
           if (subSpeed > 90)
            {
              proxy temp = new proxy(ip, port, subSpeed);
              
              masterPorxyList.Add(temp);
              Console.WriteLine("当前是第:" + masterPorxyList.Count.ToString() + "个代理IP");
            }
          
           }


        }
 
    }

    //抓网页方法
    static string catchProxIpMethord(string url,string encoding )
    {

      string htmlStr = "";
      try
      {
        if (!String.IsNullOrEmpty(url))
        {
          WebRequest request = WebRequest.Create(url);  
          WebResponse response = request.GetResponse();      
          Stream datastream = response.GetResponseStream(); 
          Encoding ec = Encoding.Default;
          if (encoding == "UTF8")
          {
            ec = Encoding.UTF8;
          }
          else if (encoding == "Default")
          {
            ec = Encoding.Default;
          }
          StreamReader reader = new StreamReader(datastream, ec);
          htmlStr = reader.ReadToEnd();        
          reader.Close();
          datastream.Close();
          response.Close();
        }
      }
      catch { }
      return htmlStr;
    }


   static void Main(string[] args)
     {
       //多线程同时抓15页
       for (int i = 1; i <= 15; i++)
       {
        
         
         ThreadPool.QueueUserWorkItem(getProxyList, i);
       }
       Console.Read();
     }

  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#爬虫抓取代理IP  # C#  # 多线程爬虫  # c# Selenium爬取数据时防止webdriver封爬虫的方法  # C# 爬虫简单教程  # 用C#做网络爬虫的步骤教学  # c#爬虫爬取京东的商品信息  # C#程序如何调用C++ dll详细教程  # C# 利用代理爬虫网页的实现方法  # 利用C#实现最基本的小说爬虫示例代码  # C#简单爬虫案例分享  # C#制作多线程处理强化版网络爬虫  # 利用C#实现网络爬虫  # c# 基于Titanium爬取微信公众号历史文章列表  # 如果你  # 第一个  # 有很多  # 几次  # 以此类推  # 要注意  # 如果没有  # 将我  # 找一个  # 就来  # 涉及到  # 速度快  # 挂了  # 两年前  # 创建一个  # 多线程  # 大家多多  # 就可以  # 抓去  # 库里 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: js代码实现下拉菜单【推荐】  如何在宝塔面板中修改默认建站目录?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  教你用AI润色文章,让你的文字表达更专业  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel如何实现模型的全局作用域?(Global Scope示例)  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何实现数据库事务?(DB Facade示例)  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何挑选优质建站一级代理提升网站排名?  iOS正则表达式验证手机号、邮箱、身份证号等  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  HTML 中动态设置元素 name 属性的正确语法详解  网站页面设计需要考虑到这些问题  Laravel如何实现事件和监听器?(Event & Listener实战)  简单实现jsp分页  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  三星、SK海力士获美批准:可向中国出口芯片制造设备  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel怎么实现模型属性的自动加密  如何在景安云服务器上绑定域名并配置虚拟主机?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  如何在阿里云高效完成企业建站全流程?  PythonWeb开发入门教程_Flask快速构建Web应用  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  *服务器网站为何频现安全漏洞?  如何用好域名打造高点击率的自主建站?  如何快速搭建高效香港服务器网站?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  微信h5制作网站有哪些,免费微信H5页面制作工具?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何在万网自助建站中设置域名及备案?  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Linux网络带宽限制_tc配置实践解析【教程】