C#——做一个简单代理IP池
一、缘由。
抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 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池的更多相关文章
- 做了一个动态代理IP池项目,邀请大家免费测试~
现在出来创业了,目前公司在深圳. 做了啥呢, 做了一个动态代理 IP 池项目 现在邀请大家免费测试体验! 免费激活码:关注微信公众号:2808proxy (每人每天限领一次噢~) 网站:https:/ ...
- 【python3】如何建立爬虫代理ip池
一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可 ...
- 构建一个给爬虫使用的代理IP池
做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...
- Python爬虫代理IP池
目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...
- 爬虫入门到放弃系列05:从程序模块设计到代理IP池
前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...
- 基于后端和爬虫创建的代理ip池
搭建免费的代理ip池 需要解决的问题: 使用什么方式存储ip 文件存储 缺点: 打开文件修改文件操作较麻烦 mysql 缺点: 查询速度较慢 mongodb 缺点: 查询速度较慢. 没有查重功能 re ...
- .Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器
目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不 ...
- python多线程建立代理ip池
之前有写过用单线程建立代理ip池,但是大家很快就会发现,用单线程来一个个测试代理ip实在是太慢了,跑一次要很久才能结束,完全无法忍受.所以这篇文章就是换用多线程来建立ip池,会比用单线程快很多.之所以 ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
随机推荐
- mysql数据导入的时候提示Got a packet bigger than 'max_allowed_packet' bytes
Got a packet bigger than 'max_allowed_packet' bytes错误 默认可能是2M 把max_allowed_packet设置大于5M试试,我设置为160M,输 ...
- 记录一些sql,怕忘了
SELECT business_line,count(*) FROM zc_db.t_bug group by business_line; 这个是展示的,显示某一项一共有多少个xxx,注意是grou ...
- js 实现数组深度copy
1. slice() slice() 方法可从已有的数组中返回选定的元素.arrayObject.slice(start,end) ,返回一个新的数组,包含从 start 到 end (不包括该元素) ...
- IIS上架设https网站证书处理备忘
1. 免费SSL证书申请 https://www.startssl.com 教程:http://hxs.fd.fj.cn/?action=show&id=13 2. 证书转换 申请到的证书有两 ...
- 监测IIS上网站的连接数
1.运行,输入,perfmon.msc 2.性能监视器>右侧区域>右键 添加计数器 3.在“可用计数器” 区域,选择Web Service,展开Web Service,选择Current ...
- js日期格式化 扩展Date()
javascript Date format(js日期格式化) 方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(H/h).分(m).秒(s ...
- Ubuntu 17 Nginx 配置 laravel 运行环境
1 安装 nginx #aptitude install nginx #apatitude install php7.1-fpm 2 在 /etc/nginx/sites-available 建立 s ...
- mongodb的安装与启动(centos7)
公司迁移mongodb,查了半天资料,各种考证,各种资讯,最后我选择很野蛮的直接把库和日志直接scp过来了....... 记录下如何安装和启动mongodb: 1.解压mongodb: [root@i ...
- WCF技术剖析(卷1)WCF全面解析文摘
第1章 wcf简介 soa体现的是一种对关注点进行分解的思想,与技术无关 soa的基本思想: a.服务自治 独立部署,不依赖其他 b.依赖于开放的标准 采用xml,xsd,及wsdl作为服务描述的 ...
- Project Tango Explorer
https://sensortower.com/android/ie/projecttango-google/app/project-tango-explorer/com.projecttango.t ...