一、缘由。

  抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 IP 地址拉入系统黑名单。从而达到禁止本地 IP 访问数据的请求。

二、思路。

  根据其他 代理 IP 网站,进行一个免费的代理 IP 进行搜集,然后进行统一 验证 管理

如下图:

三、抓取包含代理 IP 的网站页面。

  抓取来网站代码之后,利用 HtmlAgilityPack 进行 html 的解析。并将代理 IP 验证,存放队列等操作。

四、直接看效果图。

  运行效果。

  

浏览器 请求 :http://127.0.0.1:12306/ 效果。

就这样,一个简单的  属于自己的 代理 IP 池,就做好了 。。。

放上 关于 HttpListener 监听的代码

  

public static void Lisener()
{
Console.Title = url; HttpListener listerner = new HttpListener();
{
listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
listerner.Prefixes.Add(url);
listerner.Start(); new Thread(new ThreadStart(delegate
{
while (true)
{
HttpListenerContext httpListenerContext = listerner.GetContext();
new Thread(new ThreadStart(delegate
{
HttpListenerContext ctx = httpListenerContext; try
{
using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
{
ctx.Response.StatusCode = ; string ipp = ctx.Request.QueryString["ipp"];
if (null != ipp && Regex.IsMatch(ipp, @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}$"))
{
Console.WriteLine("{0}> 删除代理{1}", DateTime.Now.ToString("s"), ipp); QueueOperation(new ProxyViewModel() { Id = ipp }, IQueueType.Del); writer.WriteLine("true");
}
else
{
int count = ;
while (true)
{
if (count > ) { writer.WriteLine("false"); break; }
// 出队已个代理IP对象
var que = QueueOperation(null, IQueueType.DeQueue);
if (que.First().Key > )
{
// 判断该代理IP时间在5分钟内产生的直接返回使用
if ((que.First().Value.CreateTime.AddMinutes()) > DateTime.Now)
{
Console.WriteLine("{0}> 直接输出{1}", DateTime.Now.ToString("s"), que.First().Value.Id);
// 输出http响应代码
writer.WriteLine(que.First().Value.Id);
QueueOperation(que.First().Value, IQueueType.EnQueue);
break;
}
else
{
// 验证代理IP有效性
if (DbVerIp(que.First().Value))
{
Console.WriteLine("{0}> 验证输出{1}", DateTime.Now.ToString("s"), que.First().Value.Id);
// 输出http响应代码
writer.WriteLine(que.First().Value.Id);
// 退出本次请求
break;
}
} }
count++;
// 队列无可用代理IP情况下等待2秒再获取
Thread.Sleep(TimeSpan.FromSeconds());
}
}
//writer.Close();
//ctx.Response.Close();
}
}
catch (Exception ex)
{
try
{
Console.WriteLine("{0}> 接口異常:{1}", DateTime.Now.ToString("s"), ex.Message); using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
{
ctx.Response.StatusCode = ;
writer.WriteLine("false");
}
}
catch (Exception e)
{
}
} })).Start();
}
})).Start();
}
}

源码 地址: https://github.com/Yahuiya/Proxy

如果有什么错误的,还请指出,哈哈哈哈哈

C#——做一个简单代理IP池的更多相关文章

  1. 做了一个动态代理IP池项目,邀请大家免费测试~

    现在出来创业了,目前公司在深圳. 做了啥呢, 做了一个动态代理 IP 池项目 现在邀请大家免费测试体验! 免费激活码:关注微信公众号:2808proxy (每人每天限领一次噢~) 网站:https:/ ...

  2. 【python3】如何建立爬虫代理ip池

    一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可 ...

  3. 构建一个给爬虫使用的代理IP池

    做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...

  4. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  5. 爬虫入门到放弃系列05:从程序模块设计到代理IP池

    前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...

  6. 基于后端和爬虫创建的代理ip池

    搭建免费的代理ip池 需要解决的问题: 使用什么方式存储ip 文件存储 缺点: 打开文件修改文件操作较麻烦 mysql 缺点: 查询速度较慢 mongodb 缺点: 查询速度较慢. 没有查重功能 re ...

  7. .Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

    目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不 ...

  8. python多线程建立代理ip池

    之前有写过用单线程建立代理ip池,但是大家很快就会发现,用单线程来一个个测试代理ip实在是太慢了,跑一次要很久才能结束,完全无法忍受.所以这篇文章就是换用多线程来建立ip池,会比用单线程快很多.之所以 ...

  9. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

随机推荐

  1. All sentinels down, cannot determine where is mymaster master is running...

    修改配置的哨兵文件 vim /sentinel.conf 将保护模式关闭

  2. 创建标签的两种方法insertAdjacentHTML 和 createElement 创建标签 setAttribute 赋予标签类型 appendChild 插入标签

    1. 建立字符串和insertAdjacentHTML('beforeEnd', ) 2. 通过createElement 创建标签  setAttribute 赋予标签类型 appendChild ...

  3. Cannot find class [org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer]

    解决方案:添加spring-webmvc好多人都不知道org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer这个类到底 ...

  4. sql批量插入添加自动编号

    使用: ROW_NUMBER() over(order by ID desc) insert into dbo.Aa(Name,Nums) select top 10 NickName,ROW_NUM ...

  5. IE6789浏览器使用console.log类似的方法输出调试内容但又不影响页面正常运行

    问题来源:外网IE下,触发js报错.经检测,未清除console造成.清除console后,解决. 问题原因:console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebug ...

  6. [Jmeter]如何才能通过ant运行jmeter

    在开始运行build.xml之前,还有一步必须要做,那就是将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才 ...

  7. iPhone X的UI设计技巧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 果粉们翘首以待的iPhone X终于开始预售了!同样满怀期待的还有设计师和开发人员,他们将在iPho ...

  8. 479. Largest Palindrome Product

    class Solution { public: int largestPalindrome(int n) { vector<,,,,,,,}; ]; } }; 这里的穷举法,你不得不服

  9. PHP 微信公众号开发 - 消息推送

    项目微信公众号开发,需要做用户消息推送,记录下来以便日后使用 1,接上一篇文章,可以查看如何获取用户openid PHP 微信公众号开发 - 获取用户信息 2,添加模板消息 3,查看模板详情 根据模板 ...

  10. .net core利用MySqlBulkLoader大数据批量导入MySQL

    最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...