[开源] 基于 Tornado 和 Scrapy 的高性能代理池 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
kmz
V2EX    分享创造

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

  •  1
     
  • /div>   kmz
    Karmenzind 2018 年 6 月 20 日 4279 次点击
    这是一个创建于 2794 天前的主题,其中的信息可能已经有所发展或是发生改变。

    花一周的时间初步完成了这个项目…… 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 年 6 月 20 日

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

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

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

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

    https://github.com/lujqme/proxy_pool
    kmz
        3
    kmz  
    OP
       2018 年 6 月 20 日
    @chroming 额,,,优势是我用过,,,我去了解一下你说的 sanic
    kmz
        4
    kmz  
    OP
       2018 年 6 月 20 日
    @golmic 我这个不只是爬虫,还是个 web 服务,爬取和更新都是完全自动的
    谢谢你发这个,收藏了~
    golmic
        5
    golmic  
       2018 年 6 月 20 日 via Android
    @kmz 我看你说代理来源有限,就给你贡献一下..哈哈,你可以抓下来之后用你的项目处理或者结合一下
    kmz
        6
    kmz  
    OP
       2018 年 6 月 20 日
    @golmic 恩恩感谢~~
    kingname
        7
    kingname  
       2018 年 6 月 20 日
    大家可以看看 https://github.com/imWildCat/scylla
    比楼主这个好用的多。
    chroming
        8
    chroming  
       2018 年 6 月 20 日
    @kmz #3 我也只是简单用了下 tornado 和 sanic, 发现 sanic 的接口友好得多
    kmz
        9
    kmz  
    OP
       2018 年 6 月 20 日
    @kingname
    哈哈哈,我刚写了一个星期,支持一下嘛
    你发的这个 commits 数量都是我这个的二十倍了……
    kmz
        10
    kmz  
    OP
       2018 年 6 月 20 日
    @chroming 恩恩
    kingname
        11
    kingname  
       2018 年 6 月 20 日 via iPhone
    @kmz 这种到处抓免费代理的代理池,可用率不超过 30%。还是自己搭建比较好。
    kmz
        12
    kmz  
    OP
       2018 年 6 月 20 日
    @kingname
    我这个服务抓下来代理之后,会基于你的本地网络进行检测
    检测通过后才入库的,所以抓下来的基本都是可用的 = =
    glacer
        13
    glacer  
       2018 年 6 月 20 日
    网上抓的免费代理可用率和速度都感人... 不管是公司的活还是自用我都愿意花钱买,至少质量比免费的高不止一档了。
    kmz
        14
    kmz  
    OP
       2018 年 6 月 20 日
    @glacer 嗯嗯,对速度有要求,肯定专业代理好一点,,,
    我后面会多增加爬取源,提升检测门槛,尽可能提高代理质量,,,
    songjiaxin2008
        15
    songjiaxin2008  
       2018 年 6 月 20 日
    asyncio 和 tornato 一起使用是不是很酸爽...
    kmz
        16
    kmz  
    OP
       2018 年 6 月 20 日
    @songjiaxin2008 还好,,,基本上没用到 asyncio,,,
    和 twisted 结合才酸爽,写的过程碰到了 bug,twisted 一直阻塞,差点就放弃了……现在的解决方法还是曲线救国 = =
    kingname
        17
    kingname  
       2018 年 6 月 20 日
    @kmz 你会发现你刚刚检查可用,1 秒钟以后就失效了。
    kmz
        18
    kmz  
    OP
       2018 年 6 月 20 日
    @kingname 好的亲
    kmz
        19
    kmz  
    OP
       2018 年 6 月 22 日
    改了几个比较大的 bug,,,代码现在比发这个文章的时候靠谱得多了,,,(扶额
    xiaozizayang
        20
    xiaozizayang  
       2018 年 6 月 24 日
    我基于 sanic 写了个: https://github.com/howie6879/hproxy 异步
    kmz
        21
    kmz  
    OP
       2018 年 6 月 26 日
    @xiaozizayang 学习了!~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1179 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:27 PVG 01:27 LAX 09:27 JFK 12:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86