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

[开源] 基于 Tornado 和 Scrapy 的高性能代理池

  •  1
     
  •   kmz ·
    Karmenzind · 2018-06-20 19:15:58 +08:00 · 3326 次点击
    这是一个创建于 2108 天前的主题,其中的信息可能已经有所发展或是发生改变。

    花一周的时间初步完成了这个项目…… Github 上好像没有几个(我只找到了一个= =)把 Tornado 和 Scrapy 结合到一起的项目

    支持的特性包括:

    • 设定数目,持续从网上爬取新的免费代理,检测可用后存入本地数据库
    • 完全异步,支持高并发(从免费的基础上去衡量……)
    • 通过调用 HTTP API 来获取代理,后面有时间会增加前端控制页面
    • 周期性自检,更新可用代理

    项目地址: https://github.com/Karmenzind/fp-server

    关于代理可用性

    爬虫爬取代理时会先检测可用性(包括速度和匿名性),检测完毕后才会入库,不可用的直接抛弃,所以可以安心使用。至于代理性能,我后面会对检测方式进行优化。

    关于可存储代理数目

    我暂时没有做限制,写这个文章的时候,我本地有一万个活动(可用的)代理。我没有继续爬,因为目前代理来源只有四个,潜力有限。假如有人用的话,后面我会持续增加代理来源。

    在 Scrapy 项目中使用

    我写了一个可以直接用在 Scrapy 项目里的 middleware。后面有空我会写更多示例代码。

    环境要求

    项目是在 Archlinux 上开发的,已经测试通过的环境如下:

    • Archlinux; Python-3.6.5
    • Debian(wsl); Python-3.5.3
    • macOS 10; Python-3.6.5

    代码暂时不支持直接在 Windows 上运行,我已經打包好了 Docker 镜像,Windows 用户可以使用 Docker 部署。

    推荐 Unix/Linux 用户也使用 Docker 部署,这样是最简单的。

    更详细的介绍和使用方法见项目 README

    欢迎提 Bug 和意见给我。

    第 1 条附言  ·  2018-06-20 20:23:25 +08:00

    这个服务抓下来代理之后,会基于你的本地网络对代理进行检测(代码戳这里),检测通过后才会入库,而且会周期性自检更新。

    目前检测方法还有待优化,但是基本能够保证抓下来的代理都是可用的。当然这个“可用”需要结合“免费”这个前提来看,速度肯定和花钱买的代理没法比……

    另外这个项目刚写了一个星期,commits一共二十多条,大家轻喷哈哈哈,我慢慢改进……

    21 条回复    2018-06-26 11:01:39 +08:00
    chroming
        1
    chroming  
       2018-06-20 19:21:11 +08:00 via Android
    为啥用 tornado 做 server, tornado 相比 sanic 有什么优势吗?
    golmic
        2
    golmic  
       2018-06-20 19:24:20 +08:00 via Android
    这里有我群里大家贡献的近 20 个代理网站的解析,也是 scrapy 写的

    https://github.com/lujqme/proxy_pool
    kmz
        3
    kmz  
    OP
       2018-06-20 19:25:04 +08:00
    @chroming 额,,,优势是我用过,,,我去了解一下你说的 sanic
    kmz
        4
    kmz  
    OP
       2018-06-20 19:26:17 +08:00
    @golmic 我这个不只是爬虫,还是个 web 服务,爬取和更新都是完全自动的
    谢谢你发这个,收藏了~
    golmic
        5
    golmic  
       2018-06-20 19:31:01 +08:00 via Android
    @kmz 我看你说代理来源有限,就给你贡献一下..哈哈,你可以抓下来之后用你的项目处理或者结合一下
    kmz
        6
    kmz  
    OP
       2018-06-20 19:36:31 +08:00
    @golmic 恩恩感谢~~
    kingname
        7
    kingname  
       2018-06-20 19:44:48 +08:00
    大家可以看看 https://github.com/imWildCat/scylla
    比楼主这个好用的多。
    chroming
        8
    chroming  
       2018-06-20 19:52:31 +08:00
    @kmz #3 我也只是简单用了下 tornado 和 sanic, 发现 sanic 的接口友好得多
    kmz
        9
    kmz  
    OP
       2018-06-20 19:54:04 +08:00
    @kingname
    哈哈哈,我刚写了一个星期,支持一下嘛
    你发的这个 commits 数量都是我这个的二十倍了……
    kmz
        10
    kmz  
    OP
       2018-06-20 19:57:39 +08:00
    @chroming 恩恩
    kingname
        11
    kingname  
       2018-06-20 20:08:50 +08:00 via iPhone
    @kmz 这种到处抓免费代理的代理池,可用率不超过 30%。还是自己搭建比较好。
    kmz
        12
    kmz  
    OP
       2018-06-20 20:11:16 +08:00
    @kingname
    我这个服务抓下来代理之后,会基于你的本地网络进行检测
    检测通过后才入库的,所以抓下来的基本都是可用的 = =
    glacer
        13
    glacer  
       2018-06-20 20:12:58 +08:00
    网上抓的免费代理可用率和速度都感人... 不管是公司的活还是自用我都愿意花钱买,至少质量比免费的高不止一档了。
    kmz
        14
    kmz  
    OP
       2018-06-20 20:25:57 +08:00
    @glacer 嗯嗯,对速度有要求,肯定专业代理好一点,,,
    我后面会多增加爬取源,提升检测门槛,尽可能提高代理质量,,,
    songjiaxin2008
        15
    songjiaxin2008  
       2018-06-20 20:26:31 +08:00
    asyncio 和 tornato 一起使用是不是很酸爽...
    kmz
        16
    kmz  
    OP
       2018-06-20 20:31:16 +08:00
    @songjiaxin2008 还好,,,基本上没用到 asyncio,,,
    和 twisted 结合才酸爽,写的过程碰到了 bug,twisted 一直阻塞,差点就放弃了……现在的解决方法还是曲线救国 = =
    kingname
        17
    kingname  
       2018-06-20 21:10:26 +08:00
    @kmz 你会发现你刚刚检查可用,1 秒钟以后就失效了。
    kmz
        18
    kmz  
    OP
       2018-06-20 21:13:09 +08:00
    @kingname 好的亲
    kmz
        19
    kmz  
    OP
       2018-06-22 17:02:46 +08:00
    改了几个比较大的 bug,,,代码现在比发这个文章的时候靠谱得多了,,,(扶额
    xiaozizayang
        20
    xiaozizayang  
       2018-06-24 11:37:32 +08:00
    我基于 sanic 写了个: https://github.com/howie6879/hproxy 异步
    kmz
        21
    kmz  
    OP
       2018-06-26 11:01:39 +08:00
    @xiaozizayang 学习了!~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3236 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:45 · PVG 19:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.