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的爬取,检 ...
随机推荐
- JavaScript之深拷贝&浅拷贝
深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...
- MapReduce Notes
[MapReduce Notes] 1.一个Map/Reduce 作业的输入和输出类型如下所示: 2.Shuffle & Sort & Secondary Sort Reducer的输 ...
- 02-SSH综合案例:需求分析(后台)
1.1.7 用户模块:(后台) 不用添加了,添加的话在前台就注册了. 查询所有用户: 修改用户信息: 删除用户信息: 1.1.8 一级分类:(后台) 主要都还是增删改查的操作 查询所有一级分类: ...
- ubuntu17.10 安装ssh
sudo apt-get install openssh-server sudo /etc/init.d/ssh start
- 转)GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以”为所欲为”, ...
- Unknown type name 'NSString'
今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...
- 稀疏矩阵乘法 · Sparse Matrix Multiplication
[抄题]: 给定两个 稀疏矩阵 A 和 B,返回AB的结果.您可以假设A的列数等于B的行数. [暴力解法]: 时间分析: 空间分析: [思维问题]: [一句话思路]: 如果为零则不相乘,优化常数的复杂 ...
- redis持久化详解
一.RDB持久化 RDB 持久化 可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). 优点:快速持久化.占用磁盘空间少.适合于用做备份,主从复制也是基于RD ...
- netbeans下调试php程序-xdebug
环境说明: pc系统:ubuntu 16.04 php版本:5.6.23 apache:Apache/2.4.18 (Ubuntu) 第一步:修改xdebug.ini 打开文件/etc/php/5.6 ...
- bzr: ERROR: No push location known or specified.
出现这种错误,要先uncommit,然后拉带最新版本,再commit最后push