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的爬取,检 ...
随机推荐
- POI 3.17
发现与之前使用的有些不同 参考:https://www.cnblogs.com/h--d/p/6735110.html
- 27.OGNL与ValueStack(VS)-获取Stack Context中的信息
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 我们知道,除了可以从值栈中获取信息,还可以从Stack Context中获取 ...
- VB.NET条码机打印设置纸张大小的方法
Imports System.Drawing.PrintingImports System.Runtime.InteropServices Public Class Page <Runti ...
- Vue 实现微信 jssdk 扫码, 上传图片
流程 1: 配置微信公众号JS域名 2:前端发送URL后台获取JSSDK配置, 后台Service代码如下, 修改2处位置: WeixinUtil.APPID => 当前公众号APPID Wei ...
- Maven(三)理解Maven核心概念
转载自: http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 本文以类图的方式,介绍maven核心的12个概念以及相互之间的 ...
- sass的类型判定
由于sass的作者是rubyer,因此它的类型与JS有点不一样,但一样可以类推. @charset "utf-8";//必须设置了这个才能编译有中文的注释 $gray: #333; ...
- 迷你MVVM框架 avalonjs 0.92发布
本版本最大的改进是引入ms-class的新风格支持,以前的不支持大写类名及多个类名同时操作,新风格支持了.还有对2维监控数组的支持.并着手修复UI框架. 重构 class, hover, active ...
- LevelDB Cache机制
[LevelDB Cache机制] 对于levelDb来说,读取操作如果没有在内存的memtable中找到记录,要多次进行磁盘访问操作.假设最优情况,即第一次就在level 0中最新的文件中找到了这个 ...
- 【Python爬虫】听说你又闹书荒了?豆瓣读书9.0分书籍陪你过五一
说明 五一将至,又到了学习的季节.目前流行的各大书单主打的都是豆瓣8.0评分书籍,却很少有人来聊聊这9.0评分的书籍长什么样子.刚好最近学了学python爬虫,那就拿豆瓣读书来练练手. 爬虫 本来思路 ...
- token的作用及实现原理
1:首先,先了解一下request和session的区别request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象 ...