c# 代理IP获取通用方法

调用:

       ConcurrentQueue<string> proxyIpQueue = new ConcurrentQueue<string>();
                Grab_ProxyIp(proxyIpQueue);

返回结果:

一下是获取代理IP集合的方法:

        #region 生产IP 代理 对象
        private void Grab_ProxyIp(ConcurrentQueue<string> proxyIpQueue)
        {
            HashSet<string> proxyIp = new HashSet<string>();

            HttpHelper http = new HttpHelper();
            HttpItem para = new HttpItem();
            para.Timeout = 1000 * 10;
            para.Method = "GET";

            int count = 0;
            para.URL = "http://www.xicidaili.com/nn/1"; // 西刺
            RetryFunc(() =>
            {
                HttpResult result = http.GetHtml(para);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string regex = @"<td>(\d+\.\d+\.\d+\.\d+)</td>\s+<td>(\d+)</td>";
                    Match mstr = Regex.Match(result.Html, regex);
                    while (mstr.Success && count < 20)
                    {
                        proxyIp.Add(mstr.Groups[1].Value + ":" + mstr.Groups[2].Value);
                        mstr = mstr.NextMatch();
                        count++;
                    }

                    return true;
                }
                else
                {
                    return false;
                }
            }, 10);

            count = 0;
            para.URL = "http://ip84.com/dlgn"; // IP巴士
            RetryFunc(() =>
            {
                HttpResult result = http.GetHtml(para);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string regex = @"<td>(\d+\.\d+\.\d+\.\d+)</td>\s+<td>(\d+)</td>";
                    Match mstr = Regex.Match(result.Html, regex);
                    while (mstr.Success && count < 10)
                    {
                        proxyIp.Add(mstr.Groups[1].Value + ":" + mstr.Groups[2].Value);
                        mstr = mstr.NextMatch();
                        count++;
                    }

                    return true;
                }
                else
                {
                    return false;
                }
            }, 10);

            count = 0;
            para.URL = "http://www.ip3366.net/free/?stype=1"; // 云代理
            RetryFunc(() =>
            {
                HttpResult result = http.GetHtml(para);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string regex = @"<td>(\d+\.\d+\.\d+\.\d+)</td>\s+<td>(\d+)</td>";
                    Match mstr = Regex.Match(result.Html, regex);
                    while (mstr.Success && count < 10)
                    {
                        proxyIp.Add(mstr.Groups[1].Value + ":" + mstr.Groups[2].Value);
                        mstr = mstr.NextMatch();
                        count++;
                    }

                    return true;
                }
                else
                {
                    return false;
                }
            }, 10);

            count = 0;
            para.URL = "http://www.iphai.com/free/ng"; // IP海
            RetryFunc(() =>
            {
                HttpResult result = http.GetHtml(para);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string regex = @"<td>\s+(\d+\.\d+\.\d+\.\d+)\s+</td>\s+<td>\s+(\d+)\s+</td>";
                    Match mstr = Regex.Match(result.Html, regex);
                    while (mstr.Success && count < 10)
                    {
                        proxyIp.Add(mstr.Groups[1].Value + ":" + mstr.Groups[2].Value);
                        mstr = mstr.NextMatch();
                        count++;
                    }

                    return true;
                }
                else
                {
                    return false;
                }
            }, 10);

            count = 0;
            para.URL = "http://www.66ip.cn/nmtq.php?getnum=10&isp=0&anonymoustype=3&start=&ports=&export=&ipaddress=&area=1&proxytype=2&api=66ip"; // 66ip
            RetryFunc(() =>
            {
                HttpResult result = http.GetHtml(para);
                if (result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string regex = @"(\d+\.\d+\.\d+\.\d+):(\d+)<br/>";
                    Match mstr = Regex.Match(result.Html, regex);
                    while (mstr.Success && count < 10)
                    {
                        proxyIp.Add(mstr.Groups[1].Value + ":" + mstr.Groups[2].Value);
                        mstr = mstr.NextMatch();
                        count++;
                    }

                    return true;
                }
                else
                {
                    return false;
                }
            }, 10);

            foreach (var item in proxyIp)
            {
                proxyIpQueue.Enqueue(item);
            }
        }
        #endregion
时间: 2024-10-19 01:08:59

c# 代理IP获取通用方法的相关文章

Java远程过程调用基础:构建可自适应的动态代理对象的通用方法

[toc] Java远程过程调用基础:构建可自适应的动态代理对象的通用方法 前言 关于动态代理的知识,这里不再过多说明.这里要介绍的是,如何创建一个可自适应任意接口的动态代理对象的通用方法,也就是说,引用对象可为任意接口,举个例子,假如返回动态代理对象的方法是getProxy,而同时存在两个接口UserInterface和ProductInterface,这时可以这样使用: UserInterface user = getProxy(UserInterface.class); ProductIn

代理ip最新识别方法及代理ip有效性检测方法

网络营销时代,网络成为企业营销的重要工具.线上有非常多的营销渠道可以利用.当然方法也就越来越多:自媒体.抖音.电商.微商等等,尤其当走进大数据时代,爬虫可以帮助企业在线上采集到相当精准的用户信息,成为企业制定营销策略的关键.当然,技术流的推广人员都知道,爬虫运行少不了代理ip的辅助. 代理ip最新识别方法以及代理ip有效性检测方法 一.代理ip常见的一些功能 1.突破自身ip访问限制,现在有许多的网站都对ip地址访问进行了限制,这时则可以通过代理ip来突破限制,让自己进入网站. 2.提高访问速度

获取用户Ip地址通用方法

这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. 1 public static function getIp() 2 { 3 if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) 4 { 5 $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; 6 } 7 elseif ($HTTP_SERVER_VAR

Redis学习之代理 ip 池设计方法详解

代理 ip 因为配置简单而且廉价,经常用来作为反反爬虫的手段,但是稳定性一直是其诟病.筛选出优质的代理 ip 并不简单,即使付费购买的代理 ip 源,卖家也不敢保证 100% 可用:另外代理 ip 的生命周期也无法预知,可能上一秒能用,下一秒就扑街了.基于这些原因,会给使用代理 ip 的爬虫程序带来很多不稳定的因素.要排除代理 ip 的影响,通常的做法是建一个代理 ip 池,每次请求前来池子取一个 ip,用完之后归还,保证池子里的 ip 都是可用的.本文接下来就探讨一下,如何使用 Redis 数

Python3.x:获取代理ip

Python3.x:获取代理ip 获取代理ip,代码: # python3 # 国内高匿代理IP网站:http://www.xicidaili.com/nn/ # 爬取首页代理IP地址 from bs4 import BeautifulSoup import requests import random # 获取首页IP列表 def get_ip_list(url, headers): web_data = requests.get(url, headers=headers) soup = Be

使用TaskManager爬取2万条代理IP实现自动投票功能

话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票.可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题.于是有了以下思考 1.是否能一个人投多票,如果不行又是什么限制了一人投多票? 答:投票网站限制了一个IP或者一个用户只能投一票,防止恶意刷票行为 2.如果是一个IP一票那是否代表着多个IP就能投多票了呢? 答:答案是肯定的 3.用什么方法能够在代码里面改变自己请求的IP? 答:HTTP请求的时候设置

C#多线程爬虫抓取免费代理IP

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

pytohn爬虫成长之路:抓取代理IP并多线程验证

上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程. 一.抓取代理IP 提供免费代理IP的网站还挺多的,我在'西刺代理'上一阵猛抓后自己的IP就被其屏蔽了.只好换'IP巴士'并乖乖的减缓抓取速度了.贴上抓取代码 import urllib.request import urllib import re import time import random #抓取代理IP ip_totle=[] #所有页

写了个小爬虫,为何用上代理ip总是出现错误。

1 import urllib.request 2 import re 3 import os 4 import random 5 import threading 6 7 def url_open(url): #在第8到第12行,总是无法正常运行,代理Ip是从网上免费代理ip获取的. 8 #ips = ['117.136.234.12:80', '218.189.26.20:8080','202.194.101.150:80','180.166.112.47:8888'] 9 10 #prox