开源一款高可用的分布式代理 IP 池(附性能测试图)

2018-03-06 14:01:41 +08:00
 resolvewang

项目地址: https://github.com/SpiderClub/haipproxy

陆陆续续花了近六个月的时间实现了一款高可用的分布式代理 IP 池HAipproxy,它的主要用处是为各类被限制 IP 的爬虫提供基础的代理 IP 支撑。HAipproxy 的高可用有两层含义:(1)代理 IP 资源的高可用;(2)项目各个组件的高可用。HAipproxy 的代理 IP 源均来自互联网公开的资源,项目配置了总计 30+的墙内外代理资源提供网站,所以代理 IP 资源的数量并不是 HAipproxy 主要关心的。它主要关心的是如何从海量高度不可用的代理 IP 资源中提取出高质量低延迟的代理 IP 供爬虫使用。为此,HAipproxy 制定了一些列的校验和 IP 筛选策略。在实现 HAipproxy 之前,楼主也调研过现有的代理 IP 付费方案和开源的代理 IP 方案,付费方案中有一些质量较好的但是费用比较高,其它的和开源的项目的效果都差强人意。免费+高性能,这也是HAipproxy的核心竞争力。

Talk is cheap,我们来看点实际的东西。下面是楼主近日以知乎为测试对象,单机条件下对 HAipproxy 进行性能测试的测试结果

可以看到请求量最快可以达到 1w+/hour,楼主对一天的请求量进行了统计,有19w,效果还算令人满意。

V 友们路过的话不妨给个star吧,有使用这个项目的需求则更好了。

新年新气象,祝看了这篇广告贴和点了star的 V 友们今年升职加薪,技术精进一步。

19176 次点击
所在节点    分享创造
76 条回复
freedot
2018-03-06 21:36:49 +08:00
支持
resolvewang
2018-03-06 21:49:00 +08:00
@freedot 欢迎使用哦
exoticknight
2018-03-06 21:56:08 +08:00
造福人类。好久没搞爬虫估计用不上,不过还是贡献一个 star ~
resolvewang
2018-03-06 22:03:51 +08:00
@exoticknight #23 感动,笔芯
chenqh
2018-03-06 22:07:01 +08:00
真是大佬,进 tx 了没
xuxueli
2018-03-06 22:15:40 +08:00
这里有个 java 版本的爬虫,拥有"多线程、异步、IP 动态代理、分布式、JS 渲染"等特性。提供了自建 ip 代理池的示例代码。

https://github.com/xuxueli/xxl-crawler
resolvewang
2018-03-06 22:41:53 +08:00
@chenqh #25 资历尚浅,以后有机会一定会试试
resolvewang
2018-03-06 22:42:38 +08:00
哈哈哈,可以试试楼上的同学@ xuxueli 的爬虫框架和 haipproxy 搭配的使用效果
Cyron
2018-03-07 01:27:47 +08:00
hai p proxy 嗨皮代理?
顺便给大佬舔 jio
WildCat
2018-03-07 09:02:13 +08:00
四个命令有点麻烦 能否来个简单单命令模式?
resolvewang
2018-03-07 09:39:01 +08:00
@Cyron 哥们你真有才。不过这个名字应该是这么读,high available ip proxy,就是帖子上说的高可用代理。都是正经人,也得取个正儿八经的名字
resolvewang
2018-03-07 09:42:05 +08:00
@WildCat 感谢反馈。由于系统组件本身就比较多,包括了代理 IP 抓取程序和校验器,抓取程序定时任务调度工具和校验器定时任务调度工具,这四个命令主要就是启动这四货的。可以在一个 shell 脚本中启动它们。可以参考 [run.sh]( https://github.com/SpiderClub/haipproxy/blob/master/run.sh)。更方便的模式我还没想出来,你要有好的意见可以提一下
CrazyMelody
2018-03-07 13:28:28 +08:00
已 star~
resolvewang
2018-03-07 13:33:15 +08:00
@CrazyMelody 感谢捧场
tcpdump
2018-03-07 14:09:34 +08:00
没看懂怎么用? 怎么获取代理列表
resolvewang
2018-03-07 14:34:48 +08:00
@tcpdump 通过客户端获取。具体来讲就是 py_cli.py 文件的 ProxyFetcher 类,它有个方法叫做 get_proxy(),这是输出当前的一个可用代理(由策略决定)。还有一个 get_proxies()方法,这个是输出代理列表,两者是有一些差别的。

另外,如果有兴趣和使用需求的话,还望花几分钟读一下  examples/zhihu  的使用示例和 docs 中的文档,因为 haipproxy 提供代理的思路和目前开源出来的项目用 web api 提供的代理列表的思路有一丢丢差别。

欢迎不懂再问哈
freedot
2018-03-07 20:56:01 +08:00
可以用来刷点击,又一黑产工具😂
resolvewang
2018-03-07 21:10:31 +08:00
@freedot #37 我们做技术的还是得用道德来约束自己
liuxu
2018-03-08 19:55:49 +08:00
感谢楼主啊
resolvewang
2018-03-08 19:57:56 +08:00
@liuxu #39 用了吗?效果咋样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/435313

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX