栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

 class Program
  {
    //存放所有抓取的代理
    public static List masterPorxyList = new List();
    //代理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();
     }

  }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号