V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
WildCat
V2EX  ›  分享创造

Scylla——开源免费的优秀代理 IP 池:自动验证、JSON API、基于 React 的 Web UI、Docker 支持

  •  9
     
  •   WildCat · 2018-05-27 07:05:54 +08:00 · 11668 次点击
    这是一个创建于 2133 天前的主题,其中的信息可能已经有所发展或是发生改变。

    banner

    Build Status codecov Documentation Status PyPI version Docker Build Status

    GitHub:https://github.com/imWildCat/scylla

    中文文档:https://scylla.wildcat.io/zh/latest/

    自己是一个爬虫爱好者,有时候爬虫写的太过强大了被目标网站封了(笑)。所以就萌生了用代理 IP 的想法。很可惜很多开源代理 IP 池都是没有持续维护的,代码也比较奇怪。于是自己就写了一个。特性大概有:

    • 自动化的代理 IP 爬取与验证
    • 易用的 JSON API
    • 简单但美观的 web 用户界面,基于 TypeScript 和 React (例如,代理的地理分布)
    • 最少仅用 一条命令 即可启动
    • 无头浏览器( headless browser crawling )爬虫

    欢迎在贴中留下您的邮箱,我可以发送你 demo 地址(暂时不打算公开发布)。如果您想留邮箱,请注意:

    • 可以使用 base64 编码
    • 在您的回复的第一行或者最后一行写
    • 也可以用 [at] 替代 @

    附:几个截图 demo

    截图 1: Web UI (代理 IP 列表)

    1

    截图 2: Web UI (代理 IP 的地理分布)

    2

    第 1 条附言  ·  2018-05-27 18:39:46 +08:00

    因为是用爬虫脚本自动爬 emails,所以:

    **Email 地址请单独一行写,谢谢!**千万不要在 base64 后面加任何字符,这样会被我的智障脚本忽略。

    另外,关于一些 features (#49):

    IP 验证策略

    @golmic 关于 IP 验证策略:目前的策略有点过于简单,由于这个项目已经写了一个月了,决定先发出来(骗一波 stars )让自己更有动力去写 =。= 我会在近期完善验证策略,并且把验证策略的文档完善: https://github.com/imWildCat/scylla/issues/16

    Forward proxy

    @binux 原来这个名词叫 forward proxy,感谢!我其实一开始是有这样的想法的,但是有一些担心所以没在初版实现:

    • 担心自己实现的 forward proxy 性能不足比较鸡肋
    • 担心 XX 找到 G 点说我 XXX (你懂)
    • 实现比较 rough 可能没什么用
    • 还有就是如何给 clients 分配代理也是一个问题。一开始可以考虑随机分配,但是我理想的情况是:
    • a. clients 的 HTTP Request 带一个类似 hash 的 header,固定 hash 对应固定代理
    • b. Scylla 里自动分析请求的 HTTP Header,比如针对 Cookies 中的 session 做一次 hashing。如果判定是同一个 session 的请求,就用同一个 IP。难点在于如何判断 session id。

    我考虑先加入随机分配代理的 forward proxy: https://github.com/imWildCat/scylla/issues/17

    根据国家返回 proxy

    @zqjilove 收到需求,下一个小版本就加入: https://github.com/imWildCat/scylla/issues/18

    第 2 条附言  ·  2018-05-28 00:51:56 +08:00

    在 27, May, 2018 @ 16.50 (UTC) 时,这个项目登上了 GitHub trending 第五,感谢大家! Screenshot-2018-5-27 Build software better, together copy-crunch.png

    93 条回复    2019-06-13 15:51:01 +08:00
    Baboonowen
        1
    Baboonowen  
       2018-05-27 08:02:00 +08:00 via Android
    打破惨案
    flyxl
        2
    flyxl  
       2018-05-27 08:02:28 +08:00 via Android
    赞楼主,求 demo
    0312birdzhang
        3
    0312birdzhang  
       2018-05-27 08:06:43 +08:00 via iPhone
    先赞一个
    artandlol
        4
    artandlol  
       2018-05-27 08:18:05 +08:00 via iPhone
    YXJ0YW5kbG9sI2dtYWlsLmNvbQ==
    golmic
        5
    golmic  
       2018-05-27 08:30:47 +08:00 via Android   ❤️ 1
    i [at] lujq.me

    想知道 IP 的验证策略。因为我觉得 IP 代理池的核心就是这个。只有策略出色才能突出
    binux
        6
    binux  
       2018-05-27 08:30:57 +08:00   ❤️ 1
    我一直觉得最好用的代理 IP 池接口就是 forward proxy。
    forward proxy 对应用透明地自动 rotate,抓取的同时天然地自动验证。
    B1ock
        7
    B1ock  
       2018-05-27 08:58:07 +08:00
    bWFza3NzQHByb3Rvbm1haWwuY29t
    感谢
    o00o
        8
    o00o  
       2018-05-27 09:06:43 +08:00
    IHJvbW90Y0BnbWFpbC5jb20g
    谢谢
    panyanyany
        9
    panyanyany  
       2018-05-27 09:26:03 +08:00
    NTY4Mzk3NDQwQHFxLmNvbQ==

    请问楼主这些 ip 是从哪里来的呢,全网扫描还是?
    panyanyany
        10
    panyanyany  
       2018-05-27 09:27:35 +08:00
    @panyanyany #9 不好意思,原来还有个 providers 文件夹,现在知道是扫公开的代理了
    ThirdFlame
        11
    ThirdFlame  
       2018-05-27 09:34:56 +08:00
    ZmFuZGVsYWppQGdtYWlsLmNvbQ==
    airyland
        12
    airyland  
       2018-05-27 09:38:46 +08:00
    赞,docker 无痛安装成功
    zqjilove
        13
    zqjilove  
       2018-05-27 09:40:32 +08:00
    API 接口支持国家输出就好了
    131
        14
    131  
       2018-05-27 09:44:20 +08:00 via Android
    YmxvZ0Btb2UuaW0=

    谢谢!
    cyn
        15
    cyn  
       2018-05-27 09:48:00 +08:00
    Y3lubGl0dGxlW2F0XTEyNi5jb20=
    支持,感谢!
    dex2jar
        16
    dex2jar  
       2018-05-27 09:53:26 +08:00 via Android
    ODA3NjYwMDcxQHFxLmNvbQ==
    谢谢楼主。看起来挺好的,前段时间刚买了 5 块的 ip
    gclm
        17
    gclm  
       2018-05-27 09:53:51 +08:00 via Android
    gclm159[at]gmail.com
    支持,感谢
    Sixzeroo
        18
    Sixzeroo  
       2018-05-27 09:56:47 +08:00
    c2l4emVyb282MEBnbWFpbC5jb20=
    感谢楼主
    airyland
        19
    airyland  
       2018-05-27 09:57:21 +08:00
    报个问题,开始接口报 500,过一会正常,运行一段时间后 stats 500,proxy 列表为空。
    ccbikai
        20
    ccbikai  
       2018-05-27 10:21:35 +08:00 via iPhone
    chi#miantiao.me 谢谢楼主,自己也在爬各个代理网站的 IP,支持 https 的很少
    faceair
        21
    faceair  
       2018-05-27 10:23:01 +08:00 via iPhone
    v2ex#faceair.me 感谢楼主
    noqwerty
        22
    noqwerty  
       2018-05-27 10:35:17 +08:00 via Android
    emhvdS56eS55aUBnbWFpbC5jb20=
    谢谢楼主。
    shenlw66
        23
    shenlw66  
       2018-05-27 10:38:32 +08:00
    c2hlbmx3NjZAZ21haWwuY29t
    感谢
    tcpdump
        24
    tcpdump  
       2018-05-27 11:22:56 +08:00 via Android
    回复标记一下
    caoyufei
        25
    caoyufei  
       2018-05-27 11:33:10 +08:00
    YXRjYW95dWZlaUBnbWFpbC5jb20=
    感谢
    cocang
        26
    cocang  
       2018-05-27 11:33:24 +08:00
    Y2hvdWNoYW5nemh1QGdtYWlsLmNvbQ==
    谢谢楼主
    JakeZou
        27
    JakeZou  
       2018-05-27 11:44:25 +08:00
    em91bHV4QDEyNi5jb20=
    weegc
        28
    weegc  
       2018-05-27 12:00:49 +08:00
    d2VlZ2NAMTYzLmNvbQ==

    谢谢楼主
    yfgeek
        29
    yfgeek  
       2018-05-27 12:03:06 +08:00 via iPhone   ❤️ 1
    非常棒!正好有这个需求,粉了!
    congeec
        30
    congeec  
       2018-05-27 12:32:31 +08:00 via iPhone
    Q29uZ2VlY0BxcS5jb20=
    好人一生平安
    不过代理池怎么还有爬虫功能呢?
    chroming
        31
    chroming  
       2018-05-27 12:32:53 +08:00
    跟这个比有什么优势吗? https://github.com/SpiderClub/haipproxy
    ywind
        32
    ywind  
       2018-05-27 12:52:28 +08:00 via Android
    Z3Vvc2h1a2FuZ0Bob3RtYWlsLmNvbQ==
    感谢
    Akagi201
        33
    Akagi201  
       2018-05-27 14:10:25 +08:00
    YWthZ2kyMDFAZ21haWwuY29tCg==
    gitopen
        34
    gitopen  
       2018-05-27 14:53:34 +08:00 via Android
    Z2l0b3BlbkBnbWFpbC5jb20=
    alphabity
        35
    alphabity  
       2018-05-27 15:13:11 +08:00
    YWxwaGFiaXR5QGdtYWlsLmNvbQ==
    lje024
        36
    lje024  
       2018-05-27 15:35:27 +08:00
    c3JnYjY4OUBsamVlZHUubWw=
    感谢
    yodeser
        37
    yodeser  
       2018-05-27 15:46:23 +08:00
    eW9kZXNAeW9kZXMuY24=
    感谢感谢
    limitsy
        38
    limitsy  
       2018-05-27 16:17:22 +08:00
    bGltaXRzeTIxN0BnbWFpbC5jb20=
    感谢
    trimleo
        39
    trimleo  
       2018-05-27 16:31:02 +08:00
    bGVvY2xvdWR5QGdtYWlsLmNvbQ==
    感谢
    aiguozhedaodan
        40
    aiguozhedaodan  
       2018-05-27 16:35:23 +08:00
    YWlndW96aGVkYW9kYW5AZ21haWwuY29t
    感谢
    cnyang
        41
    cnyang  
       2018-05-27 16:55:05 +08:00
    aGFoYUBvZmZpY2UyMDE2LnNpdGU=
    不胜感激
    hlwjia
        42
    hlwjia  
       2018-05-27 16:56:12 +08:00
    aGx3amlhQGZveG1haWwuY29t

    谢谢
    IllBeBack
        43
    IllBeBack  
       2018-05-27 16:58:43 +08:00
    谢谢
    enByZWdpc3RlckBnbWFpbC5jb20=
    yazoox
        44
    yazoox  
       2018-05-27 17:09:36 +08:00 via Android
    eWF6b294QHNpbmEuY29t

    谢谢!
    JasonYo
        45
    JasonYo  
       2018-05-27 17:22:07 +08:00
    Mjc3MTc5MjMwMUBxcS5jb20=

    给力!大兄弟,多谢
    j0hnj
        46
    j0hnj  
       2018-05-27 17:52:19 +08:00
    bmlnZWxjaGlhbmdAb3V0bG9vay5jb20=

    代码不错~
    byron
        47
    byron  
       2018-05-27 18:05:34 +08:00
    Ynlyb25qaWFAZ21haWwuY29t

    吼啊。
    chenggiant
        48
    chenggiant  
       2018-05-27 18:10:05 +08:00
    Y2hlbmdjaGlidEBnbWFpbC5jb20=

    赞!
    echopan
        49
    echopan  
       2018-05-27 18:10:13 +08:00
    ZWNob3BhbjEyMzRAaG90bWFpbC5jb20= 谢谢
    WildCat
        50
    WildCat  
    OP
       2018-05-27 18:37:10 +08:00   ❤️ 1
    @golmic
    关于 IP 验证策略:目前的策略有点过于简单,由于这个项目已经写了一个月了,决定先发出来(骗一波 stars )让自己更有动力去写 =。=
    我会在近期完善验证策略,并且把验证策略的文档完善: https://github.com/imWildCat/scylla/issues/16

    @binux 原来这个名词叫 forward proxy,感谢!我其实一开始是有这样的想法的,但是有一些担心所以没在初版实现:
    - 担心自己实现的 forward proxy 性能不足比较鸡肋
    - 担心 XX 找到 G 点说我 XXX (你懂)
    - 实现比较 rough 可能没什么用
    - 还有就是如何给 clients 分配代理也是一个问题。一开始可以考虑随机分配,但是我理想的情况是:
    - a. clients 的 HTTP Request 带一个类似 hash 的 header,固定 hash 对应固定代理
    - b. Scylla 里自动分析请求的 HTTP Header,比如针对 Cookies 中的 session 做一次 hashing。如果判定是同一个 session 的请求,就用同一个 IP。难点在于如何判断 session id。

    我考虑先加入随机分配代理的 forward proxy: https://github.com/imWildCat/scylla/issues/17



    @airyland 请发下 logs,非常感谢!



    @zqjilove 收到需求,下一个小版本就加入: https://github.com/imWildCat/scylla/issues/18
    momocraft
        51
    momocraft  
       2018-05-27 18:42:05 +08:00
    bWVAam9rZXN0ZXIuaW8=

    感谢 (应该不会用很多)
    bbbb
        52
    bbbb  
       2018-05-27 18:55:35 +08:00 via iPhone
    aGVsbG9oZnlAZ21haWwuY29t
    SingeeKing
        53
    SingeeKing  
       2018-05-27 18:56:21 +08:00
    aW1zaW5nZWVAZ21haWwuY29t
    WildCat
        54
    WildCat  
    OP
       2018-05-27 19:08:56 +08:00
    > @chroming 提问: 跟这个比有什么优势吗? https://github.com/SpiderClub/haipproxy

    既然你诚心诚意的发问了,那我就王婆卖瓜下啦( 233 ):
    对比 https://github.com/SpiderClub/haipproxy,这个项目的想法如下:
    1. 更简单的依赖,不需要 scrapy-splash 或者 redis。
    2. 更优秀的文档,包括代码文档(虽然目前不是很完善)。
    3. 我写了一些测试,尽力保证项目的可用性、维护性。
    4. 完善的 Community profile ( https://github.com/imWildCat/scylla/community ),对比: https://github.com/SpiderClub/haipproxy/community。即使我以后不维护这个项目了,也希望尽可能方便大家参( jie )与( pan )
    5. README 和文档里使用“盘古之白”(中文和西文字符标点之间注意加了合适的空格,适合强迫症患者阅读),参见: https://github.com/vinta/pangu.js/blob/master/README.md
    6. 一个 `scylla` 命令或者其他 docker 命令即可启动,没那么多幺蛾子命令: https://github.com/SpiderClub/haipproxy#%E6%9C%8D%E5%8A%A1%E7%AB%AF
    fy
        55
    fy  
       2018-05-27 19:18:55 +08:00
    资瓷一下。

    ZnkwQHFxLmNvbQ==
    avichen
        56
    avichen  
       2018-05-27 19:29:01 +08:00
    YXZpY2hlbkAxMjYuY29t

    谢谢
    armysheng
        57
    armysheng  
       2018-05-27 21:17:19 +08:00
    YXJteXNoZW5nQGdtYWlsLmNvbQ==
    mikezy123
        58
    mikezy123  
       2018-05-27 22:01:56 +08:00 via iPhone
    am95emVuZzU1NUBnbWFpbC5jb20=

    感谢
    breaklayer
        59
    breaklayer  
       2018-05-27 22:08:41 +08:00
    YnJlYWtsYXllckAxNjMuY29t

    感谢
    davidf
        60
    davidf  
       2018-05-27 22:17:11 +08:00
    c3psZGZAb3V0bG9vay5jb20=

    谢谢
    Cipool
        61
    Cipool  
       2018-05-27 22:22:08 +08:00 via Android
    YTIyMTMxMDhAeWFob28uY29t
    麻烦了
    l9rw
        62
    l9rw  
       2018-05-27 22:37:04 +08:00
    aUBsOXJ3LmNu

    感谢老哥
    chroming
        63
    chroming  
       2018-05-27 22:40:42 +08:00   ❤️ 1
    @WildCat #54 感谢回复。文档确实十分完善,代码也很清晰。

    提一个小建议,Windows 无法直接安装 sanic,需手动设置 `SANIC_NO_UVLOOP=true` `SANIC_NO_UJSON=true` 两个环境变量才可安装。后期是否会考虑使用其他兼容 Windows 的后端模块来替换 sanic
    skwfar
        64
    skwfar  
       2018-05-27 23:37:30 +08:00
    c2t3ZmFyQGdtYWlsLmNvbQ==
    十分感谢
    WildCat
        65
    WildCat  
    OP
       2018-05-28 00:43:37 +08:00
    @chroming 由于目前还有太多工作需要做,暂时不考虑替换 Sanic。Win 上应该可以用 Linux 子系统解决这个问题
    Lentin
        66
    Lentin  
       2018-05-28 00:45:42 +08:00
    bGVudGluQG91dGxvb2suY29t
    okface
        67
    okface  
       2018-05-28 00:47:31 +08:00 via Android
    zgp6300[at]dingtalk.com
    Seth8277
        68
    Seth8277  
       2018-05-28 00:54:09 +08:00 via Android
    bWFpbEBpbXNldGguY24=
    谢谢
    WhyLiam
        69
    WhyLiam  
       2018-05-28 09:15:31 +08:00
    bGlhbXpodWNlQGdtYWlsLmNvbQ==
    leeger
        70
    leeger  
       2018-05-28 09:27:42 +08:00
    emx2aXJtYWNoMUBnbWFpbC5jb20=

    谢谢~~~~
    yazoox
        71
    yazoox  
       2018-05-28 09:56:44 +08:00
    不好意思,楼主。不是很懂这个搜索出来的 proxy 怎么使用?
    我在你的 github 里面提了一个问题, 有空可以去看看。
    简单说,就是我用 SwitchyOmega,设置了一个 Scylla 搜索出来的 IP:PORT 地址,但是,貌似没啥用啊?连网络都不通......
    suxing
        72
    suxing  
       2018-05-28 11:33:43 +08:00
    MTQzMjg0NTE4M0BxcS5jb20=
    saymoon
        73
    saymoon  
       2018-05-28 12:26:55 +08:00
    c2F5bW9vbkBnbWFpbC5jb20=
    感谢
    ftxg
        74
    ftxg  
       2018-05-28 12:44:11 +08:00
    anVob25neGlhb3Nob3VAMTYzLmNvbQ==
    gonglexin
        75
    gonglexin  
       2018-05-28 15:34:03 +08:00
    Z29uZ2xleGluQGdtYWlsLmNvbQ==\n
    twMM
        76
    twMM  
       2018-05-28 16:28:56 +08:00
    dGFuZ3RhbzM2NkAxNjMuY29t
    谢谢楼主
    lanxyou
        77
    lanxyou  
       2018-05-28 17:05:55 +08:00
    感谢

    bGFueHlvdUBnbWFpbC5jb20=
    keventseng
        78
    keventseng  
       2018-05-29 11:25:33 +08:00
    Y2F0emlAdmlwLnFxLmNvbQ==
    iOran
        79
    iOran  
       2018-05-29 13:08:39 +08:00
    aW9zdGlueUB5YWhvby5jb20NCg==
    ARhen
        80
    ARhen  
       2018-05-29 14:14:52 +08:00
    bDEwMTA5MDgzMjZAZ21haWwuY29t
    谢谢楼主~
    undertonememorie
        81
    undertonememorie  
       2018-05-29 15:14:40 +08:00
    aUBqb2tlci5vcmcuY24=
    谢谢楼主
    ye3245
        82
    ye3245  
       2018-05-29 18:27:28 +08:00
    eWUzMjQ1QHNpbmEuY29t
    感谢
    Mervyn
        83
    Mervyn  
       2018-05-30 18:06:42 +08:00
    bGlmZWlmZWljaG5AMTYzLmNvbQ==
    谢谢楼主。
    rik7821
        84
    rik7821  
       2018-05-31 11:15:24 +08:00
    cmlrNzgyMUAxNjMuY29t
    谢谢楼主
    MikeFeng
        85
    MikeFeng  
       2018-06-01 13:59:46 +08:00
    cWlubGFuZmVuZ0Bmb3htYWlsLmNvbQ==
    感谢
    caoyufei
        86
    caoyufei  
       2018-06-01 15:09:28 +08:00
    ipinfo
    Rate limit exceeded. Subscribe to a paid plan to increase your usage limits at http://ipinfo.io/pricing, or contact us via http://ipinfo.io/contact
    oddcc
        87
    oddcc  
       2018-06-07 15:42:45 +08:00
    c2t5Y2M3MTY0MEBnbWFpbC5jb20=

    谢谢!
    qcloud
        88
    qcloud  
       2018-06-13 09:45:06 +08:00
    搭建之后,没有 IP 耶............
    qcloud
        89
    qcloud  
       2018-06-13 10:01:52 +08:00
    OTM1MjI3Nzk5QHFxLmNvbQ==

    3Q
    demoxu
        90
    demoxu  
       2018-06-14 13:16:18 +08:00
    @WildCat 能不能再 8081 代理制返回 https 的代理,或者指定延迟以下的
    skyzan
        91
    skyzan  
       2018-06-25 21:26:31 +08:00 via Android
    MTc4MTU2NDE5NkBxcS5jb20=
    感谢
    a861123145
        92
    a861123145  
       2018-07-22 20:05:44 +08:00
    YTg2MTEyMzE0NUBnbWFpbC5jb20K

    感谢
    7lsu
        93
    7lsu  
       2019-06-13 15:51:01 +08:00
    bWlra3V5b0BnbWFpbC5jb20=
    谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1185 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:08 · PVG 07:08 · LAX 16:08 · JFK 19:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.