爱意满满的作品展示区。
resolvewang

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

  •  6
     
  •   resolvewang ·
    ResolveWang · Mar 6, 2018 · 20881 views
    This topic created in 3166 days ago, the information mentioned may be changed or developed.

    项目地址: 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 进行性能测试的测试结果

    haipproxy 性能测试结果

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

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

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

    76 replies  •  2020-02-10 00:00:38 +08:00
    golmic
    golmic
    Mar 6, 2018 via Android❤️1
    1
    这个赞一个
    Charkey
    Charkey
    Mar 6, 2018❤️1
    2
    赞一个,刚好有这块需求
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    3
    @Charkey #2 那赶紧用用,期待宝贵的反馈意见。因为开源比较晚,所以反馈的意见还不够,项目一些细节还能优化
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    4
    @golmic #1 感谢捧场 :)
    golmic
    golmic
    Mar 6, 2018 via Android❤️1
    5
    我是专门做数据抓取的,这个 IP 的需求还是很强烈的,尝试自己搭建过 IP 代理池以及打分系统,效果并不完美,下次有需求试一下你这个项目。多沟通交流~我微信 lujqme
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    6
    @golmic #5 好的,有想法的话,可以一起改进。做这个之前,我就是用着别的都不是很舒服。因此集中花了两个多月研究同类项目和其它一些文档,又结合自己的一些想法,实现了 haipproxy。期待你的使用和反馈
    haofly
    haofly
    Mar 6, 2018
    7
    666,厉害,正好用到
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    8
    @haofly #7 哈哈哈,感谢捧场。你当真用了吗
    sw10
    sw10
    Mar 6, 2018❤️1
    9
    简单看了下,是利用 Squid 的 cache_peer ?

    cache_peer {} parent {} 0 no-query weighted-round-robin weight=1 connect-fail-limit=2 allow-miss max-conn=5 name=proxy-{}

    squid_path -k reconfigure

    之前写过类似的东西,但是因为权限验证的缘故,重新用 GoLang 实现了。

    赞一个~
    resolvewang
    resolvewang
    OP
    Mar 6, 2018❤️1
    10
    @sw10 squid 是实现的一个客户端。但是它的效果应该不会有定制的客户端的效果好,比如[client/py_cli]( https://github.com/SpiderClub/haipproxy/blob/master/client/py_cli.py) 原因是 squid 对代理 IP 的使用效果没有一个正负面反馈,而定制的客户端可以对高质量 IP 和低质量 IP 进行直接的反馈,根据反馈,客户端再决定是否将相同 IP 再次传递给爬虫使用。这就是截图中的 greedy 策略。如果是用 robin 策略,那么就和使用 squid 差不多了,即高质量和低质量 IP 轮询。这种方式很可能错过很多高质量 IP,因为网上抓来的 IP 大多是短效的,客户端 IP 池可能还没轮完一轮,某些高质量 IP 可能就不能用了
    sw10
    sw10
    Mar 6, 2018
    11
    @resolvewang 思路很赞,谢谢~
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    12
    @sw10 #11 客气了。其实 haipproxy 还有一个点做得比同类项目要好,就是它取 IP 的时候看同时参照最近校验时间、响应速度和稳定性。这也是从高度不可用的代理 IP 池中挑选中质量尚可的代理 IP 的一个很重要的策略
    sunwei0325
    sunwei0325
    Mar 6, 2018
    13
    感谢楼主, git 三库 star, 以表敬意
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    14
    @sunwei0325 #13 感谢。希望能用起来,就是最好的
    iamnoten
    iamnoten
    Mar 6, 2018❤️1
    15
    支持,最近正需要这方面的东东,谢谢楼主
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    16
    @iamnoten #15 欢迎试用。使用过程中有任何问题可以直接提 issue
    xrlin
    xrlin
    Mar 6, 2018❤️1
    17
    支持
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    18
    @xrlin #17 感谢捧场
    hunk
    hunk
    Mar 6, 2018❤️1
    19
    顶,在用 IPProxy,和 scrapy 搭配,还算成。
    收藏研究着
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    20
    @hunk 可以对比使用,看看效果,hahahh
    freedot
    freedot
    Mar 6, 2018 via iPhone❤️1
    21
    支持
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    22
    @freedot 欢迎使用哦
    exoticknight
    exoticknight
    Mar 6, 2018❤️1
    23
    造福人类。好久没搞爬虫估计用不上,不过还是贡献一个 star ~
    resolvewang
    resolvewang
    OP
    Mar 6, 2018
    24
    @exoticknight #23 感动,笔芯
    simple2025
    simple2025
    Mar 6, 2018 via iPhone❤️1
    25
    真是大佬,进 tx 了没
    xuxueli
    xuxueli
    Mar 6, 2018 via Android
    26
    这里有个 java 版本的爬虫,拥有"多线程、异步、IP 动态代理、分布式、JS 渲染"等特性。提供了自建 ip 代理池的示例代码。

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

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

    欢迎不懂再问哈
    freedot
    freedot
    Mar 7, 2018 via iPhone
    37
    可以用来刷点击,又一黑产工具😂
    resolvewang
    resolvewang
    OP
    Mar 7, 2018
    38
    @freedot #37 我们做技术的还是得用道德来约束自己
    liuxu
    liuxu
    Mar 8, 2018
    39
    感谢楼主啊
    resolvewang
    resolvewang
    OP
    Mar 8, 2018
    40
    @liuxu #39 用了吗?效果咋样
    liuxu
    liuxu
    Mar 8, 2018
    41
    @resolvewang 还没用,先收藏明天试试看
    resolvewang
    resolvewang
    OP
    Mar 8, 2018
    42
    @liuxu #41 好的,欢迎反馈意见
    BadReese
    BadReese
    Mar 9, 2018
    43
    @resolvewang 用 docker 方式部署在 VPS 上,顺便修改了 setting 里的密码。本地连接的时候发现密码修改没有生效,用默认的 123456 可以连接上。这个是怎么回事呢?
    另外,获取可用代理列表一直是空的,除了按照 WIKI 里的 docker-compose up 之外,还需要执行其他操作么?
    resolvewang
    resolvewang
    OP
    Mar 9, 2018
    44
    @BadReese #43 github 上已经回复了。还望耐心阅读开发者文档
    BadReese
    BadReese
    Mar 9, 2018
    45
    @resolvewang 好的,谢谢你,这是个很棒的库
    resolvewang
    resolvewang
    OP
    Mar 9, 2018
    46
    @BadReese #45 客气。好用给个 star 或者宣传一下就好了
    Soar360
    Soar360
    Mar 10, 2018 via iPhone
    47
    每到这个时候 我就会来搭一波车
    https://proxy.coderbusy.com
    Soar360
    Soar360
    Mar 10, 2018 via iPhone
    48
    看到了 确实用到了我站的数据源 。。恭喜 你被投毒了……
    resolvewang
    resolvewang
    OP
    Mar 10, 2018
    49
    @Soar360 #48 关系不大,就算 coderbusy 数据源全有问题,其它也够用了
    resolvewang
    resolvewang
    OP
    Mar 10, 2018
    50
    @Soar360 #47 数据源墙内墙外都有很多,只不过需要体力和一些方法去搜集而已
    gamecreating
    gamecreating
    Mar 10, 2018
    51
    这个必须赞一个
    resolvewang
    resolvewang
    OP
    Mar 10, 2018
    52
    @gamecreating 感谢支持
    xiaodaoi
    xiaodaoi
    Mar 12, 2018 via iPhone
    53
    好东西
    resolvewang
    resolvewang
    OP
    Mar 12, 2018
    54
    @xiaodaoi #53 那快用用吧,期待宝贵的用户反馈
    jitongxi
    jitongxi
    Mar 13, 2018❤️1
    55
    。。。。自己用用就行了, 直接开放出来,最后又要被老外骂作蝗虫了
    resolvewang
    resolvewang
    OP
    Mar 13, 2018
    56
    @jitongxi #55 感谢提醒。老外也有用的。。。当初开源的一个原因是感觉这种验证和筛选策略很有意思,所以就 public 了
    seancheer
    seancheer
    Mar 13, 2018❤️1
    57
    @jitongxi 这么说就有些过分了,楼主开源这些东西是为了技术之间相互分享,相互学习。。什么叫害怕老外骂蝗虫?如果这是违法违反社区条例的,直接举报就行,搞的好像老外就很高尚,没有爬虫似得
    jitongxi
    jitongxi
    Mar 13, 2018
    58
    @seancheer 可笑,你根本没听懂我在说什么。
    Betsy
    Betsy
    Mar 16, 2018
    59
    [并没有 IP]( )
    Betsy
    Betsy
    Mar 16, 2018
    60
    @resolvewang 如上图所示,所以是哪里错了吗?
    resolvewang
    resolvewang
    OP
    Mar 16, 2018
    61
    @Betsy #60 master 分支更新了一些代码,不向后兼容,目前文档由于精力原因还没更新,你可以下载 release 当中的 0.1 版本进行测试  2.你可以使用 redisdesktopmanager 来查看已抓取到的代理,肯定是没问题的
    resolvewang
    resolvewang
    OP
    Mar 16, 2018
    62
    https://github.com/SpiderClub/haipproxy/releases

    这里下载

    同时也要注意 IP 池有个预热的过程,大概在半小时到一小时之间,因为刚启动是不可能马上就有已校验的代理 IP 的
    EricInBj
    EricInBj
    Mar 16, 2018❤️1
    63
    赞赞,暂时用不着,先收着
    resolvewang
    resolvewang
    OP
    Mar 16, 2018
    64
    @EricInBj #63 谢谢支持
    salamanderMH
    salamanderMH
    Mar 26, 2018
    65
    好东西,就是有点担心,用的人多了,代理池取到 ip 的概率会受影响吧
    resolvewang
    resolvewang
    OP
    Mar 26, 2018
    66
    @salamanderMH #65 嗯,是的,我开源它的主要目的在于分享这种校验和筛选 IP 的策略,虽然现在代理源还算多,但是可能也经不住成千上万的用户同时使用,特别是抓取网站大都相同的情况。正是考虑到你说的这种情况,所以写了几个文档,用以让用户了解所有组件的作用,怎么进行代理源扩展和定制校验器。这样大家可以接入一些项目没包括的代理源,甚至付费代理源。效果肯定是能通过项目的策略来保证的
    iamnoten
    iamnoten
    Mar 27, 2018
    67
    @resolvewang 不好意思,打扰了,我在虚拟机上搭建环境,但是 sudo docker pull scrapinghub/splash, 总是报错 error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/39/3926e5aac017cdd47961dccb8dcb83fc1789ec1ccfefcaa4f03f81aa4c10a3c8/data?Expires=1522175127&Signature=UfxYM9jhI-tqCgvfqfbg8mCpDQErJhxSawpQnX6QWLCUFZrq5xOKHOUdSNC19HnqnjhMi7e7GeNq1tfuxjn7HNLNDYnuDduaF9mG4uwJvbzu9b9~~DOnoWUML207DIS54tV4JCI~ix0PZjuTEtvk1efh3BA-U-Onl0UObJ8ggZQ_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: net/http: TLS handshake timeout
    不知道你有没有遇到过这个问题?
    在网上搜了很多,有说是虚拟机的问题,有说是墙的问题,试了很多办法包括调整 mtu,设置代理,都没有成功。

    谢谢
    resolvewang
    resolvewang
    OP
    Mar 28, 2018
    68
    @iamnoten #67 TLS 这个感觉是网络问题啊,握手失败了。你能用 docker pull 拉取其它镜像吗?如果不行的话,可以搜索一下 docker 镜像加速,比如设置阿里云的 docker 镜像源等

    你也可以尝试另外一台虚拟机或者宿主机上试试啊,我没遇到过这个问题,无法给出建设性的解答,不好意思哈
    resolvewang
    resolvewang
    OP
    Mar 28, 2018
    69
    @iamnoten #67 此外,你也可以将它的镜像下载下来,在本机再打包之类的
    chi1st
    chi1st
    Mar 31, 2018
    70
    谢谢楼主,试用了一下很强大,要是能有直接与 scrapy 对接的接口就好了(
    resolvewang
    resolvewang
    OP
    Mar 31, 2018
    71
    @chi1st #70 感谢支持。可以直接调用 ProxyFetcher,为 scrapy 写一个中间件就行了。

    目前在找工作,精力不是很够。预计下一次大的更新会在几个月之后,可能会扩展一些客户端、添加对一些爬虫框架的原生支持和优化筛选和调度算法
    382601486
    382601486
    Apr 19, 2018
    72
    @resolvewang 环境安装老是失败,有没有一键安装什么的?谢谢
    Berny
    Berny
    Feb 15, 2019
    73
    赞,可以支持自己设定 IP 池么?
    Sum0l
    Sum0l
    Jun 4, 2019
    74
    感谢分享,已经试用了,但目前很多源已经失效,可用的 ip 不多。考虑加入付费啦
    resolvewang
    resolvewang
    OP
    Jul 14, 2019
    75
    @Sum0l 公开源很久没维护了,因此源都失效了,加入付费源效果就很明显了
    Nasser
    Nasser
    Feb 10, 2020
    76
    有国外的源吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1466 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 18:36 · PVG 02:36 · LAX 10:36 · JFK 13:36
    ♥ Do have faith in what you're doing.